먼저, 감사합니다. 앞에 질문사항에서 힌트를 주셔서 거의 해결했습니다.
마지막으로 한가지 더 질문드리겠습니다.
계층쿼리를 이용해서 밑에 있는 로우의 컬럼이름과 타입을 가져다가 테이블 생성 스크립트를 만들고 싶은데요..
돌려보면 아시겠지만, rm이 1일경우 script 를 뽑게 되어 있습니다.
근데 지금 쿼리대로라면 각 행마다 실행이 되서요, rm1인 곳에서 모두 밑에 컬럼들도 뽑고 싶은데요.
조언 부탁드립니다.
SELECT CASE WHEN RM ='1' THEN TABLE_NAME ELSE '' END TABLE_NAME , COLUMN_ID , COLUMN_NAME , DATA_TYPE , DATA_LENGTH , TARGET , CASE WHEN RM ='1' THEN 'CREATE TABLE'|| TABLE_NAME ||' ( '||COLUMN_NAME || ' (' || '),' ELSE '' END SCRIPT FROM ( SELECT TABLE_NAME , COLUMN_ID , COLUMN_NAME , DATA_TYPE , DATA_LENGTH , CASE -- 문자형 WHEN DATA_TYPE = 'VARCHAR2' AND DATA_LENGTH = '200' AND SUBSTR(TABLE_NAME,1,2) ='IF' THEN 'VARCHAR(255)' WHEN DATA_TYPE = 'VARCHAR2' AND DATA_LENGTH > '256' THEN 'TEXT' WHEN DATA_TYPE = 'VARCHAR2' AND DATA_LENGTH < '254' THEN 'VARCHAR('||DATA_LENGTH||')' -- 날짜형 WHEN DATA_TYPE = 'DATE' THEN 'TIMESTAMP' -- 숫자형 WHEN DATA_TYPE ='NUMBER' AND COLUMN_NAME LIKE 'LVL' THEN 'TINYINT' WHEN DATA_TYPE ='NUMBER' AND COLUMN_NAME LIKE '%_LEVEL' THEN 'TINYINT' WHEN DATA_TYPE ='NUMBER' AND COLUMN_NAME LIKE 'COLOR_SIGNAL_ID' THEN 'TINYINT' WHEN DATA_TYPE ='NUMBER' AND COLUMN_NAME LIKE 'SUCCESS_QTY' THEN 'INT' WHEN DATA_TYPE ='NUMBER' AND COLUMN_NAME LIKE 'FAIL_QTY' THEN 'INT' WHEN DATA_TYPE ='NUMBER' AND COLUMN_NAME LIKE 'UPDATE_QTY' THEN 'INT' WHEN DATA_TYPE ='NUMBER' AND COLUMN_NAME LIKE '%SEQ' THEN 'INT' WHEN DATA_TYPE ='NUMBER' AND COLUMN_NAME LIKE '%_CNT' THEN 'INT' WHEN DATA_TYPE ='NUMBER' AND COLUMN_NAME LIKE '%_QTY' THEN 'INT' WHEN DATA_TYPE ='NUMBER' AND COLUMN_NAME LIKE '%RATIO' THEN 'FLOAT' WHEN DATA_TYPE ='NUMBER' AND COLUMN_NAME LIKE '%RATE' THEN 'FLOAT' ELSE 'BIGINT' END TARGET , ROW_NUMBER () OVER (PARTITION BY TABLE_NAME ORDER BY TABLE_NAME) RM FROM USER_TAB_COLUMNS WHERE TABLE_NAME <> 'PLAN_TABLE' AND TABLE_NAME <> 'PLSQL_ARCHIVE' ORDER BY 1,2 )