ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Database 테이블 정의서 및 컬럼구조 쿼리를 통해 가져오기
    Database 2011. 10. 12. 10:24
    해당 스키마에 존재하는 테이블에 대한 구조를 쿼리를 통해서 가져옵니다.
    SQL Server에서는 사용해보지 않았습니다. Oracle에서 사용!!
    SELECT DECODE(COLUMN_ID, 1, A1.TABLE_NAME, '') TABLE_NAME
          ,DECODE(COLUMN_ID, 1, A1.TABLE_COMMENTS, '') TABLE_COMMENTS
          ,A1.COLUMN_ID
          ,A1.COLUMN_NAME
          ,A1.COLUMN_COMMENTS
          ,DECODE(B1.CONSTRAINT_TYPE, 'P', 'Y') PK_FLAG
          ,DECODE(A1.NULL_FLAG, '', 'NOT NULL', '') NULL_FLAG
          ,A1.DATA_TYPE || (CASE A1.DATA_TYPE  WHEN 'NUMBER' THEN '(' || TO_CHAR(A1.DATA_LENGTH) || ',' || TO_CHAR(A1.DATA_PRECISION) || ')'
                                               WHEN 'DATE' THEN ' '
                                               ELSE '(' || A1.DATA_LENGTH || ')' END) DATA_TYPE
          ,C1.DATA_DEFAULT
    FROM
      (
        SELECT B.COMMENTS TABLE_COMMENTS
              ,A.TABLE_NAME TABLE_NAME
              ,C.COMMENTS COLUMN_COMMENTS
              ,A.COLUMN_NAME COLUMN_NAME
              ,(CASE A.NULLABLE WHEN 'Y' THEN 'Y' END) NULL_FLAG
              , A.DATA_TYPE DATA_TYPE
              , A.DATA_LENGTH
              , A.COLUMN_ID AS COLUMN_ID
              , A.DATA_PRECISION
        FROM USER_TAB_COLUMNS A
            ,USER_TAB_COMMENTS B
            ,USER_COL_COMMENTS C
        WHERE A.TABLE_NAME = B.TABLE_NAME
        AND (A.TABLE_NAME = C.TABLE_NAME AND A.COLUMN_NAME = C.COLUMN_NAME)
        AND B.TABLE_TYPE = 'TABLE'
      ) A1,
      (
        SELECT A.TABLE_NAME
              ,A.COLUMN_NAME
              ,B.CONSTRAINT_TYPE
        FROM USER_CONS_COLUMNS A
            ,USER_CONSTRAINTS B
        WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
        AND B.CONSTRAINT_TYPE IN ('P', 'R')
      ) B1,
      (
        SELECT TABLE_NAME, COLUMN_NAME, DATA_DEFAULT FROM USER_TAB_COLUMNS WHERE DATA_DEFAULT IS NOT NULL
      ) C1
    WHERE A1.TABLE_NAME = B1.TABLE_NAME(+)
    AND A1.COLUMN_NAME = B1.COLUMN_NAME(+)
    AND A1.TABLE_NAME = C1.TABLE_NAME(+)
    AND A1.COLUMN_NAME = C1.COLUMN_NAME(+)
    ORDER BY A1.TABLE_NAME, A1.COLUMN_ID
    SELECT DECODE(COLUMN_ID, 1, A1.TABLE_NAME, '') TABLE_NAME
          ,DECODE(COLUMN_ID, 1, A1.TABLE_COMMENTS, '') TABLE_COMMENTS
          ,A1.COLUMN_ID
          ,A1.COLUMN_NAME
          ,A1.COLUMN_COMMENTS
          ,DECODE(B1.CONSTRAINT_TYPE, 'P', 'Y') PK_FLAG
          ,DECODE(A1.NULL_FLAG, '', 'NOT NULL', '') NULL_FLAG
          ,A1.DATA_TYPE || (CASE A1.DATA_TYPE  WHEN 'NUMBER' THEN '(' || TO_CHAR(A1.DATA_LENGTH) || ',' || TO_CHAR(A1.DATA_PRECISION) || ')'
                                               WHEN 'DATE' THEN ' '
                                               ELSE '(' || A1.DATA_LENGTH || ')' END) DATA_TYPE
          ,C1.DATA_DEFAULT
    FROM
      (
        SELECT B.COMMENTS TABLE_COMMENTS
              ,A.TABLE_NAME TABLE_NAME
              ,C.COMMENTS COLUMN_COMMENTS
              ,A.COLUMN_NAME COLUMN_NAME
              ,(CASE A.NULLABLE WHEN 'Y' THEN 'Y' END) NULL_FLAG
              , A.DATA_TYPE DATA_TYPE
              , A.DATA_LENGTH
              , A.COLUMN_ID AS COLUMN_ID
              , A.DATA_PRECISION
        FROM USER_TAB_COLUMNS A
            ,USER_TAB_COMMENTS B
            ,USER_COL_COMMENTS C
        WHERE A.TABLE_NAME = B.TABLE_NAME
        AND (A.TABLE_NAME = C.TABLE_NAME AND A.COLUMN_NAME = C.COLUMN_NAME)
        AND B.TABLE_TYPE = 'TABLE'
      ) A1,
      (
        SELECT A.TABLE_NAME
              ,A.COLUMN_NAME
              ,B.CONSTRAINT_TYPE
        FROM USER_CONS_COLUMNS A
            ,USER_CONSTRAINTS B
        WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
        AND B.CONSTRAINT_TYPE IN ('P', 'R')
      ) B1,
      (
        SELECT TABLE_NAME, COLUMN_NAME, DATA_DEFAULT FROM USER_TAB_COLUMNS WHERE DATA_DEFAULT IS NOT NULL
      ) C1
    WHERE A1.TABLE_NAME = B1.TABLE_NAME(+)
    AND A1.COLUMN_NAME = B1.COLUMN_NAME(+)
    AND A1.TABLE_NAME = C1.TABLE_NAME(+)
    AND A1.COLUMN_NAME = C1.COLUMN_NAME(+)
    ORDER BY A1.TABLE_NAME, A1.COLUMN_ID
    
    출처:.. 선배님의 인터넷 검색!!x

    'Database' 카테고리의 다른 글

    [ORACLE] any-some, all  (0) 2011.12.08
    [Oracle] Connect by  (0) 2011.06.30
    Oracle Function  (0) 2011.04.23
    [Oracle] Function  (0) 2011.01.06
    [Oracle] Minus, Not Exists, ...  (0) 2010.10.25
Designed by Tistory.