예전에 테이블 컬럼 정보 조회 쿼리를 올린적이 있었는데....
이리저리 도움을 받아서 다시 정리했다.

음.. 이번거는 목적이 '테이블 정의서'라서.... 
조금 애매하기는 하다.

아래의 쿼리문을 그대로 돌리면 해당 유저의 스키마 테이블을 모두 조회한다.
아참.. 오라클 실행계획을 보면 LOOP가 굉장히 많고 시간도 조금 걸리는 문장이란걸 유념하자.
그리고 좀 길다...쩝...

SELECT (CASE WHEN MAIN.COLUMN_ID = 1 THEN MAIN.TABLE_COMMENTS 
                       ELSE '' END)                                                                             table_kor_name
           , (CASE WHEN MAIN.COLUMN_ID = 1 THEN MAIN.TABLE_NAME 
                        ELSE '' END )                                                                           table_eng_name
           , MAIN.COLUMN_ID                                                                                column_id
           , MAIN.COLUMN_NAME                                                                          column_name
           , MAIN.COLUMN_COMMENTS                                                                 column_comments
           , (CASE SUB.CONSTRAINT_TYPE WHEN 'P' 
                                                             THEN 'PK' 
                                                             WHEN 'R' 
                                                             THEN 'FK ('||SUB.FK_COLUNM||')' END) key_flag
           , (CASE NVL(MAIN.NULL_FLAG, 'N') WHEN 'N' 
                                                                 THEN 'NOT NULL' 
                                                                 ELSE '' END)                                    null_flag
           , MAIN.DATA_TYPE                                                                                 data_type
           , (CASE MAIN.DATA_TYPE WHEN 'NUMBER' 
                                                   THEN (CASE WHEN MAIN.DATA_PRECISION IS NOT NULL 
                                                                       THEN TO_CHAR(MAIN.DATA_LENGTH)||' ('
                                                                                ||TO_CHAR(MAIN.DATA_PRECISION)||')'                                                                                     ELSE TO_CHAR(MAIN.DATA_LENGTH) END)
                                                   WHEN 'DATE'   
                                                   THEN '' 
                                                   ELSE TO_CHAR(MAIN.DATA_LENGTH) END)      data_type_length
   FROM (SELECT T_COMT.COMMENTS                                              table_comments
                         , T_COLS.TABLE_NAME                                             table_name
                         , C_COMT.COMMENTS                                             column_comments
                         , T_COLS.COLUMN_NAME                                         column_name
                         , (CASE T_COLS.NULLABLE WHEN 'Y' THEN 'Y' END) null_flag
                         , T_COLS.DATA_TYPE                                               data_type
                         , T_COLS.DATA_LENGTH                                           data_length
                         , T_COLS.COLUMN_ID                                               column_id
                         , T_COLS.DATA_PRECISION                                       data_precision
                 FROM USER_TAB_COLUMNS T_COLS
                         , USER_TAB_COMMENTS T_COMT
                         , USER_COL_COMMENTS C_COMT
                WHERE T_COLS.TABLE_NAME  = T_COMT.TABLE_NAME
                     AND T_COLS.TABLE_NAME  = C_COMT.TABLE_NAME
                     AND T_COLS.COLUMN_NAME = C_COMT.COLUMN_NAME
                     AND T_COMT.TABLE_TYPE  = 'TABLE'
             ) MAIN
           , (SELECT CONST.CONSTRAINT_TYPE    constraint_type
                         , CONST.TABLE_NAME             table_name
                         , COLS.COLUMN_NAME            column_name
                         , R_COLS.COLUMN_NAME         fk_colunm
                 FROM USER_CONSTRAINTS CONST
                         , USER_CONS_COLUMNS COLS
                         , USER_CONS_COLUMNS R_COLS
                WHERE CONST.CONSTRAINT_NAME   = COLS.CONSTRAINT_NAME
                    AND CONST.CONSTRAINT_TYPE IN ('P', 'R')
                    AND CONST.R_CONSTRAINT_NAME = R_COLS.CONSTRAINT_NAME(+)
             ) SUB
 WHERE MAIN.TABLE_NAME    = SUB.TABLE_NAME(+)
     AND MAIN.COLUMN_NAME   = SUB.COLUMN_NAME(+)
     --AND MAIN.TABLE_NAME  = UPPER('TABLE_NAMES')  /*특정 테이블 조회일 경우 사용.*/
 ORDER BY MAIN.TABLE_NAME, MAIN.COLUMN_ID
;


헉...이거 신경써서 오와 열을 맞췄더니만.... 
미리보기 하니 다 깨지네...쩝.. 몰라....

+ Recent posts