nugawiki

./categories/server

Oracle 테이블 명세서 쿼리

업데이트 2026-07-21 조회수

Oracle / Tibero 테이블 명세서 쿼리

-- 테이블 목록
SELECT TAB.TABLE_NAME, COM.COMMENTS, TO_CHAR(OBJ.CREATED,'YYYY-MM-DD') AS CREATE_DATE
  FROM USER_TABLES TAB, USER_TAB_COMMENTS COM, USER_OBJECTS OBJ
 WHERE TAB.TABLE_NAME = COM.TABLE_NAME
   AND TAB.TABLE_NAME = OBJ.OBJECT_NAME
   AND OBJ.OBJECT_TYPE = 'TABLE'
   -- AND TAB.TABLE_NAME IN (...)
 ORDER BY TAB.TABLE_NAME;

-- 컬럼 목록 (TABLE_NAME = '테이블명')
SELECT V.COLUMN_ID, V.COLUMN_NAME,
       CASE V.DATA_TYPE
            WHEN 'NUMBER' THEN CASE WHEN V.DATA_PRECISION IS NULL THEN 'NUMBER'
                                   ELSE 'NUMBER(' || V.DATA_PRECISION || ')' END
            WHEN 'CLOB' THEN V.DATA_TYPE
            WHEN 'DATE' THEN V.DATA_TYPE
            WHEN 'FLOAT' THEN 'FLOAT'
            WHEN 'TIMESTAMP(6)' THEN 'TIMESTAMP'
            ELSE V.DATA_TYPE || '(' || V.CHAR_LENGTH || ')' END AS DATA_TYPE,
       CASE WHEN V.CONSTRAINT_TYPE IS NOT NULL THEN 'Y' ELSE '' END AS PK,
       CASE WHEN V.RCOLUMN IS NOT NULL THEN 'Y' ELSE '' END AS FK,
       V.NULLABLE, V.DATA_DEFAULT, V.COMMENTS
  FROM (
        SELECT COL.COLUMN_ID, COL.COLUMN_NAME, COM.COMMENTS, TCOM.COMMENTS AS T_COMMENTS,
               COL.DATA_TYPE, COL.DATA_PRECISION, COL.CHAR_LENGTH, COL.NULLABLE, COL.DATA_DEFAULT,
               CON.CONSTRAINT_TYPE, FCON.RCOLUMN
          FROM USER_TAB_COLUMNS COL
               INNER JOIN USER_COL_COMMENTS COM
                 ON COL.TABLE_NAME = COM.TABLE_NAME AND COL.COLUMN_NAME = COM.COLUMN_NAME
               INNER JOIN USER_TAB_COMMENTS TCOM ON COL.TABLE_NAME = TCOM.TABLE_NAME
               LEFT JOIN (
                 SELECT C.TABLE_NAME, C.COLUMN_NAME, S.CONSTRAINT_TYPE
                   FROM USER_CONS_COLUMNS C
                   JOIN USER_CONSTRAINTS S ON C.CONSTRAINT_NAME = S.CONSTRAINT_NAME
                  WHERE S.CONSTRAINT_TYPE = 'P'
               ) CON ON CON.TABLE_NAME = COL.TABLE_NAME AND CON.COLUMN_NAME = COL.COLUMN_NAME
               LEFT JOIN (
                 SELECT C.TABLE_NAME, C.COLUMN_NAME, RC.TABLE_NAME||'.'||RC.COLUMN_NAME AS RCOLUMN
                   FROM USER_CONS_COLUMNS C
                   JOIN USER_CONSTRAINTS S
                     ON C.TABLE_NAME = S.TABLE_NAME AND C.CONSTRAINT_NAME = S.CONSTRAINT_NAME
                   JOIN USER_CONS_COLUMNS RC
                     ON S.R_CONSTRAINT_NAME = RC.CONSTRAINT_NAME AND C.POSITION = RC.POSITION
                  WHERE S.CONSTRAINT_TYPE = 'R'
               ) FCON ON FCON.TABLE_NAME = COL.TABLE_NAME AND FCON.COLUMN_NAME = COL.COLUMN_NAME
         WHERE COL.TABLE_NAME = '테이블명'
) V
 ORDER BY V.COLUMN_ID;

-- 제약조건
SELECT U.CONSTRAINT_NAME,
       CASE WHEN C.CONSTRAINT_TYPE = 'R' THEN 'Foreign Key'
            WHEN C.CONSTRAINT_TYPE = 'P' THEN 'Primary Key'
            ELSE 'Check' END AS TYPE,
       C.STATUS, U.COLUMN_NAME, C.SEARCH_CONDITION
  FROM USER_CONS_COLUMNS U
       JOIN USER_TAB_COLUMNS T ON U.TABLE_NAME = T.TABLE_NAME AND U.COLUMN_NAME = T.COLUMN_NAME
       JOIN USER_CONSTRAINTS C ON U.CONSTRAINT_NAME = C.CONSTRAINT_NAME
 WHERE C.GENERATED = 'USER NAME'
   AND C.CONSTRAINT_TYPE IN ('R','C','P')
   AND U.TABLE_NAME = '테이블명'
 ORDER BY C.CONSTRAINT_TYPE DESC, T.COLUMN_ID;

-- 인덱스
SELECT INDEX_NAME, UNIQUENESS, STATUS, INDEX_TYPE,
       LTRIM(SYS_CONNECT_BY_PATH(COLUMN_NAME, ','), ',') AS COLUMNS
  FROM (
        SELECT INDEX_NAME, UNIQUENESS, STATUS, INDEX_TYPE, COLUMN_NAME,
               ROW_NUMBER() OVER(PARTITION BY INDEX_NAME ORDER BY COLUMN_POSITION) AS RN,
               COUNT(*) OVER(PARTITION BY INDEX_NAME) AS CNT
          FROM (
                SELECT I.INDEX_NAME, I.UNIQUENESS, I.STATUS, I.INDEX_TYPE,
                       IC.COLUMN_NAME, IC.COLUMN_POSITION
                  FROM USER_INDEXES I
                  JOIN USER_IND_COLUMNS IC ON I.INDEX_NAME = IC.INDEX_NAME
                 WHERE I.TABLE_NAME = '테이블명'
               )
       )
 WHERE RN = CNT
 START WITH RN = 1
CONNECT BY PRIOR RN = RN - 1 AND PRIOR INDEX_NAME = INDEX_NAME
 ORDER BY UNIQUENESS DESC, INDEX_NAME;

-- 시퀀스
SELECT SEQUENCE_NAME, INCREMENT_BY, CYCLE_FLAG, CACHE_SIZE, LAST_NUMBER
  FROM USER_SEQUENCES
 WHERE SEQUENCE_NAME = 'PG_BUDGET_EVALUATION';

./comments