Oracleテーブル定義の確認方法【DESC・USER_TAB_COLUMNS完全ガイド】

当ページのリンクには広告が含まれています。

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_TYPEVARCHAR2、NUMBER、DATE など
DATA_LENGTH文字列型の最大バイト長
DATA_PRECISIONNUMBERの整数桁数
DATA_SCALENUMBERの小数桁数
NULLABLEY = NULL可、N = NOT NULL
DATA_DEFAULTデフォルト値(設定がない場合はNULL)
COLUMN_IDCREATE 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の意味:

制約の種類
PPRIMARY KEY(主キー)
UUNIQUE(一意制約)
RFOREIGN KEY(外部キー)
CCHECK制約 / 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_TYPENORMAL / BITMAP など
UNIQUENESSUNIQUE / 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
  • 制約・インデックスも含めた完全な定義を把握したいなら各データディクショナリビューを組み合わせる

本番環境でのテーブル調査やドキュメント作成の際に活用してください。


よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ITの事や自分の経験談など綴っていきたいと思っています。

コメント

コメントする

CAPTCHA


目次