반응형

==== 난 이거 사용.

SELECT A1.TABLE_COMMENTS

           , A1.TABLE_NAME

           , A1.COLUMN_ID

           , A1.COLUMN_NAME

           , A1.COLUMN_COMMENTS

           , (CASE

              WHEN B1.CONSTRAINT_TYPE = 'P'

              THEN 'Y'

              END) PK_FLAG

           , NVL(A1.NULL_FLAG, 'N') AS 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 

  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

WHERE ( A1.TABLE_NAME = B1.TABLE_NAME(+)

     AND A1.COLUMN_NAME = B1.COLUMN_NAME(+))

  --AND A1.TABLE_NAME LIKE 'VMS%'

ORDER BY A1.TABLE_NAME, A1.COLUMN_ID



==== 원본 내용

--우선 코맨트를 전부 넣은 상태에서 실행해야 합니다. 
COMMENT ON TABLE    스키마명.테이블명 IS '테이블설명';
COMMENT ON COLUMN 스키마명.테이블명.컬럼명 IS '컬럼설명';
-- 테이블 정의서 1번째 방법
SELECT A1.TABLE_COMMENTS
           , A1.TABLE_NAME
--        , A1.COLUMN_ID
           , A1.COLUMN_NAME AS COLUMN_ID
           , A1.COLUMN_COMMENTS AS COLUMN_NAME
           , A1.DATA_TYPE AS DATA_TYPE     
           , (CASE A1.DATA_TYPE WHEN 'NUMBER' THEN TO_CHAR(A1.DATA_LENGTH)
                                              WHEN 'DATE'   THEN ' ' 
                                              ELSE TO_CHAR(A1.DATA_LENGTH) END) AS DATA_LENGTH
           , NVL(A1.NULL_FLAG, 'N') AS NULL_FLAG                              
           , (CASE WHEN B1.CONSTRAINT_TYPE = 'P' THEN 'PK' END) PK_FLAG
  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
WHERE (    A1.TABLE_NAME = B1.TABLE_NAME(+)
     AND A1.COLUMN_NAME = B1.COLUMN_NAME(+))
  --AND A1.TABLE_NAME LIKE 'VMS%'
ORDER BY A1.TABLE_NAME, A1.COLUMN_ID
 
 
-- 테이블정으서 만들기 2번째 방법
SELECT 
    X.TABLE_NAME TABLE_ID, 
    (SELECT COMMENTS FROM USER_TAB_COMMENTS 
                  WHERE TABLE_NAME = X.TABLE_NAME) TABLE_NM,
    X.COLUMN_NAME FIELD_ID, 
    (SELECT COMMENTS FROM USER_COL_COMMENTS 
                  WHERE TABLE_NAME = X.TABLE_NAME AND COLUMN_NAME = X.COLUMN_NAME) FIELD_NAME,
    X.DATA_TYPE AS "TYPE", 
    DECODE(X.DATA_TYPE, 
                 'DATE', NULL,
                 'BLOB', NULL, 
                  X.DATA_LENGTH || CASE WHEN X.DATA_PRECISION IS NOT NULL THEN ',' || X.DATA_SCALE END ) 
                  DATATYPES, 
    CASE WHEN SUBSTR(Y.INDEX_NAME, 1, 2) = 'PK' THEN 'PK' 
             ELSE DECODE(X.NULLABLE, 'N', 'NOT NULL', '') END "NOT NULL", 
    X.DATA_DEFAULT 
FROM COLS X, USER_IND_COLUMNS Y 
WHERE X.TABLE_NAME = Y.TABLE_NAME(+) AND X.COLUMN_NAME = Y.COLUMN_NAME(+) 
ORDER BY X.TABLE_NAME, X.COLUMN_ID 
 
-- 테이블정으서 만들기 3번째 방법(주로 사용)
SELECT A1.TABLE_COMMENTS
           , A1.TABLE_NAME
           , A1.COLUMN_ID
           , A1.COLUMN_NAME
           , A1.COLUMN_COMMENTS
           , (CASE
              WHEN B1.CONSTRAINT_TYPE = 'P'
              THEN 'Y'
              END) PK_FLAG
           , NVL(A1.NULL_FLAG, 'N') AS 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 
  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
WHERE ( A1.TABLE_NAME = B1.TABLE_NAME(+)
     AND A1.COLUMN_NAME = B1.COLUMN_NAME(+))
  --AND A1.TABLE_NAME LIKE 'VMS%'
ORDER BY A1.TABLE_NAME, A1.COLUMN_ID
 
 
-- 테이블 목록 만들기(대략적인 크기로..)
SELECT TA1.TABLE_NAME AS TALBE_ID, 
       TA1.COMMENTS AS TABLE_NAME, 
       TA2.DATA_LENGTH AS DATA_LENGTH,
       TA3.MAX_NUM AS MAX_NUM,
       TA3.INITIAL_NUM AS INITIAL_NUM,
       (TA2.DATA_LENGTH*TA3.MAX_NUM) AS EXTEND_NUM
  FROM
       (SELECT  TABLE_NAME, COMMENTS FROM USER_TAB_COMMENTS WHERE TABLE_TYPE = 'TABLE') TA1,
       (SELECT  TABLE_NAME, SUM(DATA_LENGTH) AS DATA_LENGTH FROM USER_TAB_COLUMNS GROUP BY TABLE_NAME) TA2,
       (SELECT  TABLE_NAME
        ,(CASE 
              WHEN (NUM_ROWS < 1000) THEN 1000
              WHEN (10000   > NUM_ROWS) AND (NUM_ROWS > 1000)   THEN 10000
              WHEN (100000  > NUM_ROWS) AND (NUM_ROWS > 10000)  THEN 100000
              WHEN (1000000 > NUM_ROWS) AND (NUM_ROWS > 100000) THEN 1000000
              ELSE 10000000
          END    ) AS MAX_NUM
        , INITIAL_EXTENT AS INITIAL_NUM
        , GREATEST(4, CEIL(NUM_ROWS / 
                     DECODE(((ROUND(((1958 - (INI_TRANS * 23)) * ((100 - PCT_FREE) /100)) / 
                                    DECODE(AVG_ROW_LEN,0,1,AVG_ROW_LEN))))*2,0,1,
                        ((ROUND(((1958 - (INI_TRANS * 23)) * ((100 - PCT_FREE) /100)) / 
                                    DECODE(AVG_ROW_LEN,0,1,AVG_ROW_LEN))))*2)) * 2)
          AS TABLESIZE_KBYTES
           FROM  USER_TABLES) TA3
WHERE TA1.TABLE_NAME = TA2.TABLE_NAME
  AND TA1.TABLE_NAME = TA3.TABLE_NAME 
ORDER BY TA1.TABLE_NAME

출처: http://egloos.zum.com/lune23/v/437445

반응형
LIST

+ Recent posts