파티션 있는 테이블 생성하기.
완전 짜증남. 그래서 짜본 쿼리 유용할지 ...
모르면 손이 고생.
2000년 ~ 2006년 데이터 : 년 파티션
2007년 ~ 2020년 데이터 : 월 파티션
파티션 명 : PT_YYYYMMDD
-- ~ 2007 year
with a as (select level L from dual connect by level< 7)
SELECT 'ALTER TABLE '||TABLE_OWNER||'.'||TABLE_NAME||' ADD PARTITION PT_'||
TO_CHAR(TO_NUMBER(SUBSTR(PARTITION_NAME,4,4))+L)||'0101 VALUES LESS THAN ('''||TO_CHAR(TO_NUMBER(SUBSTR(PARTITION_NAME,4,4))+L+1)||'0101'');' "--"
FROM ALL_TAB_PARTITIONS, a
WHERE TABLE_OWNER = 'SCHEMA'
ORDER BY TABLE_NAME, L;
;
-- ~ 2007 year
with a as (
select TO_CHAR(ADD_MONTHS(TO_DATE('200612','YYYYMM'),level),'YYYYMM') L from dual connect by TO_CHAR(ADD_MONTHS(TO_DATE('200612','YYYYMM'),level),'YYYYMM') <= '202101'
)
SELECT 'ALTER TABLE '||TABLE_OWNER||'.'||TABLE_NAME||' ADD PARTITION PT_'||L||'01 VALUES LESS THAN ('||DECODE(''''||LEAD(L,1) OVER (PARTITION BY TABLE_NAME ORDER BY L)||'''','''''','MAXVALUE',''''||LEAD(L,1) OVER (PARTITION BY TABLE_NAME ORDER BY L)||'01''' )||');' "--"
FROM ALL_TAB_PARTITIONS, a
WHERE TABLE_OWNER = ' SCHEMA '
AND PARTITION_NAME = 'PT_20000101'
ORDER BY TABLE_NAME, L;