Oracleデータベースでテーブルの定義(カラム名・データ型・制約など)を確認する方法を解説します。DESCコマンドからUSER_TAB_COLUMNSなどのデータディクショナリビューまで、現場でよく使う方法を網羅しています。
目次
1. DESCコマンドで手軽に確認する {#desc}
最もシンプルな方法です。SQL*PlusやSQL Developer上ですぐに使えます。
DESC テーブル名実行例:
DESC EMP出力例:
名前 NULL? タイプ
------------------------- -------- --------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)DESCはカラム名・NULL制約・データ型を素早く確認するのに便利です。ただし詳細情報(デフォルト値・コメントなど)は取得できないため、詳しく調べたい場合は後述のデータディクショナリビューを使用します。
2. USER_TAB_COLUMNSで詳細情報を取得する {#user_tab_columns}
USER_TAB_COLUMNSは、現在のユーザーが所有するテーブルのカラム情報を持つデータディクショナリビューです。
SELECT
COLUMN_NAME, -- カラム名
DATA_TYPE, -- データ型
DATA_LENGTH, -- 最大バイト長
DATA_PRECISION, -- 数値の精度
DATA_SCALE, -- 小数点以下の桁数
NULLABLE, -- NULLを許可するか(Y/N)
DATA_DEFAULT, -- デフォルト値
COLUMN_ID -- カラムの定義順序
FROM
USER_TAB_COLUMNS
WHERE
TABLE_NAME = 'EMP' -- テーブル名は大文字で指定
ORDER BY
COLUMN_ID;主なカラムの意味:
| カラム名 | 内容 |
|---|---|
| COLUMN_NAME | カラム名 |
| DATA_TYPE | VARCHAR2、NUMBER、DATE など |
| DATA_LENGTH | 文字列型の最大バイト長 |
| DATA_PRECISION | NUMBERの整数桁数 |
| DATA_SCALE | NUMBERの小数桁数 |
| NULLABLE | Y = NULL可、N = NOT NULL |
| DATA_DEFAULT | デフォルト値(設定がない場合はNULL) |
| COLUMN_ID | CREATE TABLE内での定義順序 |
テーブル名の大文字・小文字に注意
Oracleのデータディクショナリでは、テーブル名は基本的に大文字で格納されています。小文字で指定すると結果が0件になるため注意してください。
-- ✅ 正しい
WHERE TABLE_NAME = 'EMP'
-- ❌ 誤り(結果が0件になる)
WHERE TABLE_NAME = 'emp'小文字のテーブル名(クォートで作成したテーブル)の場合は、作成時の大文字・小文字に合わせてください。
3. ALL_TAB_COLUMNS / DBA_TAB_COLUMNSとの違い {#all_dba}
Oracleのテーブル定義確認に使うビューは3種類あります。
| ビュー名 | 対象範囲 |
|---|---|
| USER_TAB_COLUMNS | 自分が所有するテーブルのみ |
| ALL_TAB_COLUMNS | 自分がアクセスできる全テーブル |
| DBA_TAB_COLUMNS | データベース全体(DBA権限が必要) |
他ユーザーのテーブルを確認する場合:
SELECT
OWNER,
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
NULLABLE
FROM
ALL_TAB_COLUMNS
WHERE
OWNER = 'SCOTT'
AND TABLE_NAME = 'EMP'
ORDER BY
COLUMN_ID;4. 制約(主キー・外部キー・NOT NULL)を確認する {#constraints}
制約一覧を確認する
SELECT
CONSTRAINT_NAME, -- 制約名
CONSTRAINT_TYPE, -- 制約の種類
COLUMN_NAME, -- 対象カラム名
R_CONSTRAINT_NAME -- 参照先の制約名(外部キーの場合)
FROM
USER_CONSTRAINTS uc
JOIN USER_CONS_COLUMNS ucc
ON uc.CONSTRAINT_NAME = ucc.CONSTRAINT_NAME
WHERE
uc.TABLE_NAME = 'EMP'
ORDER BY
CONSTRAINT_TYPE, COLUMN_NAME;CONSTRAINT_TYPEの意味:
| 値 | 制約の種類 |
|---|---|
| P | PRIMARY KEY(主キー) |
| U | UNIQUE(一意制約) |
| R | FOREIGN KEY(外部キー) |
| C | CHECK制約 / NOT NULL |
主キーだけを確認する
SELECT
ucc.COLUMN_NAME
FROM
USER_CONSTRAINTS uc
JOIN USER_CONS_COLUMNS ucc
ON uc.CONSTRAINT_NAME = ucc.CONSTRAINT_NAME
WHERE
uc.TABLE_NAME = 'EMP'
AND uc.CONSTRAINT_TYPE = 'P';5. インデックスを確認する {#indexes}
SELECT
ui.INDEX_NAME,
ui.INDEX_TYPE,
ui.UNIQUENESS,
uic.COLUMN_NAME,
uic.COLUMN_POSITION
FROM
USER_INDEXES ui
JOIN USER_IND_COLUMNS uic
ON ui.INDEX_NAME = uic.INDEX_NAME
WHERE
ui.TABLE_NAME = 'EMP'
ORDER BY
ui.INDEX_NAME, uic.COLUMN_POSITION;主な出力カラムの意味:
| カラム名 | 内容 |
|---|---|
| INDEX_NAME | インデックス名 |
| INDEX_TYPE | NORMAL / BITMAP など |
| UNIQUENESS | UNIQUE / NONUNIQUE |
| COLUMN_NAME | インデックスを張っているカラム |
| COLUMN_POSITION | 複合インデックスの場合のカラム順序 |
6. テーブルのコメントを確認する {#comments}
テーブルやカラムにコメントが設定されている場合、以下で確認できます。
テーブルコメントを確認する
SELECT
TABLE_NAME,
COMMENTS
FROM
USER_TAB_COMMENTS
WHERE
TABLE_NAME = 'EMP';カラムコメントを確認する
SELECT
COLUMN_NAME,
COMMENTS
FROM
USER_COL_COMMENTS
WHERE
TABLE_NAME = 'EMP'
ORDER BY
COLUMN_NAME;7. まとめ:用途別クエリ一覧 {#summary}
| やりたいこと | 使うビュー / コマンド |
|---|---|
| カラム名・型・NULL制約を素早く確認 | DESC テーブル名 |
| デフォルト値・詳細型情報を確認 | USER_TAB_COLUMNS |
| 他ユーザーのテーブルを確認 | ALL_TAB_COLUMNS |
| 主キー・外部キーなどの制約を確認 | USER_CONSTRAINTS + USER_CONS_COLUMNS |
| インデックス情報を確認 | USER_INDEXES + USER_IND_COLUMNS |
| テーブル・カラムのコメントを確認 | USER_TAB_COMMENTS / USER_COL_COMMENTS |
まとめ
Oracleでテーブル定義を確認する方法は用途によって使い分けが重要です。
- 素早く確認したいなら
DESC - 詳細な型情報やデフォルト値が必要なら
USER_TAB_COLUMNS - 制約・インデックスも含めた完全な定義を把握したいなら各データディクショナリビューを組み合わせる
本番環境でのテーブル調査やドキュメント作成の際に活用してください。






コメント