Database

Database 테이블 정의서 및 컬럼구조 쿼리를 통해 가져오기

Foolishdevil 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