Oracle

あるスキーマのテーブル構造(プライマリーキーなど)を出力するSQL

あるスキーマのテーブル構造(プライマリーキーなど)を出力するSQLです

プライマリーキーがちゃんと当たってるかなど確認で使っています

他のSQLも組み合わせるともっとよくなるかもですね

→2015/10/24 更新

テーブルのコメントと別スキーマに同じ名前でPKがセットされてると重複してしまったので修正しました。

※↓のエリア内文字切れてるのでカーソルあてて出てくるエリアの右端の斜め右上線をクリックすると全体化されます

--あるスキーマのテーブル構造を出力するSQL
SELECT T.TABLE_NAME,
 TC.COMMENTS,
 C.COLUMN_NAME AS "COLUMN",
 CASE WHEN PK.COLUMN_POSITION IS NOT NULL THEN PK.COLUMN_POSITION ELSE NULL END AS "PK",
 C.DATA_TYPE AS "型",
 CASE WHEN C.DATA_PRECISION IS NOT NULL
 THEN C.DATA_PRECISION || ',' || C.DATA_SCALE
 ELSE TO_CHAR(C.DATA_LENGTH)
 END AS "長さ",
 C.NULLABLE AS "NULL",
 C.DATA_DEFAULT AS "初期値",
 CC.COMMENTS AS "コメント"
FROM
 ALL_TABLES T
 INNER JOIN ALL_TAB_COLUMNS C ON T.OWNER = C.OWNER AND T.TABLE_NAME = C.TABLE_NAME
 INNER JOIN ALL_COL_COMMENTS CC ON T.OWNER = CC.OWNER AND T.TABLE_NAME = CC.TABLE_NAME AND C.COLUMN_NAME = CC.COLUMN_NAME
 LEFT JOIN (
 SELECT
 IDX.TABLE_OWNER,
 IDX.INDEX_NAME,
 CONST.TABLE_NAME,
 IDX.COLUMN_NAME,
 IDX.COLUMN_POSITION
 FROM
 ALL_IND_COLUMNS IDX
 INNER JOIN ALL_CONSTRAINTS CONST ON IDX.INDEX_NAME = CONST.CONSTRAINT_NAME AND CONST.CONSTRAINT_TYPE = 'P' AND CONST.OWNER = 'ここにスキーマ名'
 ) PK ON T.OWNER = PK.TABLE_OWNER AND T.TABLE_NAME = PK.TABLE_NAME AND C.COLUMN_NAME = PK.COLUMN_NAME
INNER JOIN ALL_TAB_COMMENTS TC ON T.OWNER = TC.OWNER AND T.TABLE_NAME = TC.TABLE_NAME
WHERE
 T.OWNER = 'ここにスキーマ名'

ORDER BY
 T.TABLE_NAME,
 C.COLUMN_ID

スポンサーリンク

-Oracle
-, ,

© 2024 ぱそやんうぇぶ