-- 오라클 테이블정의서추출 SQL
WITH LIST AS
(
SELECT A.TABLE_NAME,
C.COMMENTS AS TABLE_COMMENT,
A.COLUMN_ID,
A.COLUMN_NAME,
A.DATA_TYPE,
A.DATA_LENGTH,
DECODE(A.NULLABLE,'N','NOT NULL','') AS NULLABLE,
B.COMMENTS AS COLUMN_COMMENT
, CASE WHEN (SELECT COUNT(*)
FROM DBA_CONSTRAINTS AA
, DBA_CONS_COLUMNS BB
WHERE AA.OWNER = BB.OWNER
AND AA.TABLE_NAME = BB.TABLE_NAME
AND AA.CONSTRAINT_NAME =BB.CONSTRAINT_NAME
AND AA.OWNER = A.OWNER
AND AA.TABLE_NAME =A.TABLE_NAME
AND BB.OWNER=A.OWNER
AND BB.TABLE_NAME=A.TABLE_NAME
AND BB.COLUMN_NAME=A.COLUMN_NAME
AND AA.CONSTRAINT_TYPE = 'P'
AND POSITION IS NOT NULL) >0 THEN 'Y' ELSE '' END AS PK
, CASE WHEN (SELECT COUNT(*)
FROM DBA_CONSTRAINTS AA
, DBA_CONS_COLUMNS BB
WHERE AA.OWNER = BB.OWNER
AND AA.TABLE_NAME = BB.TABLE_NAME
AND AA.CONSTRAINT_NAME =BB.CONSTRAINT_NAME
AND AA.OWNER = A.OWNER
AND AA.TABLE_NAME =A.TABLE_NAME
AND BB.OWNER=A.OWNER
AND BB.TABLE_NAME=A.TABLE_NAME
AND BB.COLUMN_NAME=A.COLUMN_NAME
AND AA.CONSTRAINT_TYPE = 'R'
AND POSITION IS NOT NULL) >0 THEN 'Y' ELSE '' END AS FK
-- , DECODE(E.INDEX_NAME,NULL,'',E.INDEX_NAME ||' (' || E.COLUMN_NAME || ')') AS IDX
, E.INDEX_NAME AS IDX
FROM dba_tab_columns A,
all_col_comments B,
DBA_TAB_COMMENTS C,
ALL_IND_COLUMNS E
WHERE A.OWNER = B.OWNER
AND A.TABLE_NAME = B.TABLE_NAME
AND A.COLUMN_NAME = B.COLUMN_NAME
AND A.OWNER = C.OWNER(+)
AND A.TABLE_NAME = C.TABLE_NAME(+)
AND A.OWNER = E.Table_OWNER(+)
AND A.TABLE_NAME = E.TABLE_NAME(+)
AND A.COLUMN_NAME = E.COLUMN_NAME(+)
AND A.OWNER = 'DB사용자명' -- DB 사용자명
),
PKLIST AS
(
SELECT C.TABLE_NAME,
C.COLUMN_NAME,
C.POSITION
FROM USER_CONS_COLUMNS C,
USER_CONSTRAINTS S
WHERE C.CONSTRAINT_NAME = S.CONSTRAINT_NAME
AND S.CONSTRAINT_TYPE = 'P'
)
SELECT L.TABLE_NAME AS "TABLE_NAME",
L.TABLE_COMMENT AS "TABLE_COMMENT",
L.COLUMN_ID AS "NO",
L.COLUMN_COMMENT AS "COLUMN_COMMENT",
L.COLUMN_NAME AS "COLUMN_NAME",
L.DATA_TYPE AS "DATA_TYPE",
L.DATA_LENGTH AS "SIZE",
L.NULLABLE AS "NULLABLE",
L.PK AS "PK",
L.FK AS "FK",
L.IDX AS "IDX"
FROM LIST L,
PKLIST P
WHERE L.TABLE_NAME = P.TABLE_NAME(+)
AND L.COLUMN_NAME = P.COLUMN_NAME(+)
ORDER BY L.TABLE_NAME,
NVL(P.POSITION, 99)
;
'개발 > Oracle' 카테고리의 다른 글
DB 사용자명 조회 SQL (0) | 2022.07.28 |
---|