본문 바로가기

Oracle/SQL Query

[QUERY]PARTITIION ADD

파티션 있는 테이블 생성하기.

 

완전 짜증남. 그래서 짜본 쿼리 유용할지 ...


모르면 손이 고생.


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;