개발/database

[oracle] 오라클 테이블 목록, 컬럼 상세 조회

가시죠 2021. 1. 17. 18:30
반응형

테이블 목록 조회

SELECT
  OBJ.OWNER  -- 테이블 소유자(계정)
  , TABS.TABLESPACE_NAME  -- 테이블스페이스명
  , TABS.TABLE_NAME  -- 테이블명
  , COMM.COMMENTS  -- 테이블 설명
  , TABS.NUM_ROWS  -- 테이블 데이터건수
FROM ALL_OBJECTS OBJ
INNER JOIN USER_TABLES TABS
  ON TABS.TABLE_NAME = OBJ.OBJECT_NAME
INNER JOIN ALL_TAB_COMMENTS COMM
  ON COMM.TABLE_NAME = TABS.TABLE_NAME
WHERE 1=1
  -- 테이블만
  AND OBJ.OBJECT_TYPE = 'TABLE'
  -- 오라클 기본 계정은 제외
  AND OBJ.OWNER NOT IN ('SYSTEM','SYS','PUBLIC', 'WMSYS')
  -- 제외할 테이블명 (필요없는 임시테이블 등..)
  AND OBJ.OBJECT_NAME NOT LIKE '%TEMP%'
  AND OBJ.OBJECT_NAME NOT LIKE '%TMP%'
  AND OBJ.OBJECT_NAME NOT LIKE '%TOAD%'
ORDER BY OBJ.OWNER ASC, TABLE_NAME ASC
;

 

테이블 컬럼 조회

SELECT
  OBJ.OWNER  -- 테이블 소유자(계정)
  , TABS.TABLESPACE_NAME  -- 테이블스페이스명
  , TABS.TABLE_NAME  -- 테이블명
  , COMM.COMMENTS  -- 테이블 설명
  , COLS.COLUMN_NAME  -- 컬럼명
  , COLSCOMM.COMMENTS  -- 컬럼설명
  , COLS.NULLABLE  -- NULL 허용여부
  , COLS.DATA_TYPE -- 보기편하게 수정
  , CASE WHEN COLS.DATA_TYPE IN ('NUMBER') AND COLS.DATA_PRECISION IS NOT NULL THEN COLS.DATA_PRECISION||','||COLS.DATA_SCALE
         WHEN COLS.DATA_TYPE IN ('NUMBER') AND COLS.DATA_PRECISION IS NULL THEN TO_CHAR(DATA_LENGTH)
         ELSE COLS.CHAR_LENGTH||' CHAR'
    END AS DATATYPE
  , COLS.DATA_DEFAULT AS DATA_DEFAULT  -- 기본값 (LONG형이라 별도의 방법으로 조회 필요)
  , COLS.DATA_LENGTH  -- BYTE 형태의 길이
  , COLS.CHAR_LENGTH  -- CHAR 형태의 길이 (1 CHAR가 3byte 또는 4byte 일 수 있음)
FROM ALL_OBJECTS OBJ
INNER JOIN USER_TABLES TABS
  ON TABS.TABLE_NAME = OBJ.OBJECT_NAME
INNER JOIN ALL_TAB_COMMENTS COMM
  ON COMM.TABLE_NAME = TABS.TABLE_NAME
INNER JOIN COLS COLS
  ON COLS.TABLE_NAME = TABS.TABLE_NAME
INNER JOIN USER_COL_COMMENTS COLSCOMM
  ON COLSCOMM.TABLE_NAME = COLS.TABLE_NAME
 AND COLSCOMM.COLUMN_NAME = COLS.COLUMN_NAME  
WHERE 1=1
  -- 테이블만
  AND OBJ.OBJECT_TYPE = 'TABLE'
  -- 오라클 기본 계정은 제외
  AND OBJ.OWNER NOT IN ('SYSTEM','SYS','PUBLIC', 'WMSYS')
  -- 제외할 테이블명 (필요없는 임시테이블 등..)
  AND OBJ.OBJECT_NAME NOT LIKE '%TEMP%'
  AND OBJ.OBJECT_NAME NOT LIKE '%TMP%'
  AND OBJ.OBJECT_NAME NOT LIKE '%TOAD%'
  -- 특정 테이블만 보고 싶을 경우
  AND OBJ.OBJECT_NAME = '테이블명'
ORDER BY OBJ.OWNER ASC, TABLE_NAME ASC, COLS.COLUMN_ID
;
반응형