2006-12-07

テーブル構造をSQLで取得する方法

Oracleでテーブル構造を知りたい場合は、DESCコマンドを利用する(SQL*PLUSで「DESC テーブル名」を実行)方法がありますが、SQLで取得したい場合は以下のようにします。
SELECT
T.TABLE_NAME
,SEGMENT_COLUMN_ID
,T.COLUMN_NAME
,T.DATA_TYPE
,T.DATA_LENGTH
,T.NULLABLE
,C.COMMENTS
,min(DECODE(P.COLUMN_NAME,T.COLUMN_NAME, -1, 0)) PRIMARYKEY
FROM USER_TAB_COLS T
,USER_COL_COMMENTS C
,USER_IND_COLUMNS P
,USER_TABLES U
WHERE T.TABLE_NAME = C.TABLE_NAME
AND T.COLUMN_NAME = C.COLUMN_NAME
AND T.TABLE_NAME = P.TABLE_NAME
AND T.TABLE_NAME = U.TABLE_NAME
GROUP BY T.TABLE_NAME
,SEGMENT_COLUMN_ID
,T.COLUMN_NAME
,T.DATA_TYPE
,T.DATA_LENGTH
,T.NULLABLE
,C.COMMENTS
ORDER BY T.TABLE_NAME, SEGMENT_COLUMN_ID

DDL文(Create Table 等)を作成したい場合は、DBMS_METADATAパッケージ(9i以降)を使用すれば直接DDLを抜き出すことができるようです。

DBMS_METADATA 参考URL:
DBMS_METADATA による定義文の取り出し - oracle tips and tricks
コメントを投稿