728x90
1. 테이블 정보 조회
SELECT ACC.TABLE_NAME
, ATC.COMMENTS
, ACC.COLUMN_NAME
, SUBSTR(REPLACE(INITCAP('z'||ACC.COLUMN_NAME), '_', ''), 2) COLUMN_NAME_CAMEL -- MY_COL -> myCol
, ACC.COMMENTS || NVL2(ACC2.POSITION, '(' || DECODE(AC.CONSTRAINT_TYPE, 'P', 'PK', AC.CONSTRAINT_TYPE) || ACC2.POSITION || ')',NULL) COMMENTS
, ATC2.DATA_TYPE
, NVL2(ATC2.DATA_PRECISION, ATC2.DATA_PRECISION || ',' || ATC2.DATA_SCALE, ATC2.DATA_LENGTH) DATA_LENGTH
FROM ALL_TAB_COMMENTS ATC
INNER JOIN ALL_TAB_COLS ATC2
ON ATC.OWNER = ATC2.OWNER
AND ATC.TABLE_NAME = ATC2.TABLE_NAME
INNER JOIN ALL_COL_COMMENTS ACC
ON ATC2.OWNER = ACC.OWNER
AND ATC2.TABLE_NAME = ACC.TABLE_NAME
AND ATC2.COLUMN_NAME = ACC.COLUMN_NAME
LEFT OUTER JOIN (
SELECT *
FROM ALL_CONS_COLUMNS
WHERE POSITION IS NOT NULL) ACC2
ON ACC.OWNER = ACC2.OWNER
AND ACC.TABLE_NAME = ACC2.TABLE_NAME
AND ACC.COLUMN_NAME = ACC2.COLUMN_NAME
LEFT OUTER JOIN ALL_CONSTRAINTS AC
ON AC.OWNER = ACC2.OWNER
AND AC.CONSTRAINT_NAME = ACC2.CONSTRAINT_NAME
AND AC.TABLE_NAME = ACC2.TABLE_NAME
WHERE ACC.OWNER = 'MY_OWNER'
--AND ACC.TABLE_NAME = 'MY_TABLE'
ORDER BY ATC.TABLE_NAME, ATC2.COLUMN_ID
;
2. 테이블 비교
컬럼이 어떤 게 바뀌었는지 확인할때 사용
CNT가 1이면 한 테이블에만 있는 칼럼
SELECT ATC.TABLE_NAME
, ATC.COLUMN_NAME
, ACC.COMMENTS
, COUNT(1) OVER(PARTITION BY ATC.COLUMN_NAME) CNT
FROM ALL_TAB_COLUMNS ATC
INNER JOIN ALL_COL_COMMENTS ACC
ON ATC.OWNER = ACC.OWNER
AND ATC.TABLE_NAME = ACC.TABLE_NAME
AND ATC.COLUMN_NAME = ACC.COLUMN_NAME
WHERE ATC.TABLE_NAME IN ('MY_TABLE', 'MY_TABLE_BACK')
ORDER BY CNT, ATC.TABLE_NAME, ATC.COLUMN_ID
;
728x90
'Programming > Oracle' 카테고리의 다른 글
KILL SESSION (0) | 2023.01.06 |
---|---|
Merge (0) | 2022.11.03 |
Cursor 사용 방법 3가지 (0) | 2022.10.14 |