select
USER_OBJECTS.OBJECT_TYPE
-- テーブル情報
,USER_TAB_COLS.TABLE_NAME
,USER_TAB_COMMENTS.COMMENTS TABLE_COMMENTS
-- 列情報
,USER_TAB_COLS.COLUMN_NAME
,USER_TAB_COLS.DATA_TYPE
,NVL(USER_TAB_COLS.DATA_PRECISION,USER_TAB_COLS.CHAR_LENGTH) LENGTH
,USER_TAB_COLS.DATA_SCALE
,USER_TAB_COLS.DATA_LENGTH DATA_BYTE
-- 制約条件
,USER_CONS_COLUMNS.CONSTRAINT_NAME
,USER_CONS_COLUMNS.POSITION
,USER_TAB_COLS.NULLABLE
,NVL2(USER_CONS_COLUMNS.CONSTRAINT_NAME, USER_CONSTRAINTS.CONSTRAINT_TYPE ,'')
-- 列 補足情報
,USER_TAB_COLS.COLUMN_ID
,USER_COL_COMMENTS.COMMENTS COL_COMMENTS
from
USER_TAB_COLS
LEFT JOIN USER_TAB_COMMENTS -- テーブル名のコメントを取得する為のもの
ON USER_TAB_COMMENTS.TABLE_NAME = USER_TAB_COLS.TABLE_NAME
LEFT JOIN USER_OBJECTS -- オブジェクトタイプを取得する為のもの
ON USER_OBJECTS.OBJECT_NAME = USER_TAB_COLS.TABLE_NAME
LEFT JOIN USER_COL_COMMENTS -- 列のコメントを取得する為のもの
ON USER_COL_COMMENTS.TABLE_NAME = USER_TAB_COLS.TABLE_NAME
AND USER_COL_COMMENTS.COLUMN_NAME = USER_TAB_COLS.COLUMN_NAME
LEFT JOIN USER_CONSTRAINTS -- テーブルに対する制約の種類を特定する為のもの
ON USER_CONSTRAINTS.TABLE_NAME = USER_TAB_COLS.TABLE_NAME
AND USER_CONSTRAINTS.CONSTRAINT_TYPE = 'P' -- プライマリ制約のみとする
LEFT JOIN USER_CONS_COLUMNS -- 列の制約を取得する為のもの
ON USER_CONS_COLUMNS.CONSTRAINT_NAME = USER_CONSTRAINTS.CONSTRAINT_NAME
AND USER_CONS_COLUMNS.COLUMN_NAME = USER_TAB_COLS.COLUMN_NAME
WHERE
-- ( USER_CONSTRAINTS.CONSTRAINT_TYPE IS NULL OR USER_CONSTRAINTS.CONSTRAINT_TYPE = 'P')
-- 削除されているテーブルは、除去する
not exists (select 'X' from RECYCLEBIN where USER_TAB_COLS.TABLE_NAME = RECYCLEBIN.OBJECT_NAME)
-- 不要なオブジェクトは、除外する
AND USER_OBJECTS.OBJECT_TYPE NOT IN ('INDEX PARTITION','INDEX','TABLE SUBPARTITION','TABLE PARTITION')
ORDER BY
TABLE_NAME
,COLUMN_ID