添加分区30天



我有下表:

CREATE TABLE "ICTPART_DAILY_SUMMARY"
(    

"EVENT_START_DATE" DATE
"ACCOUNTING_METHOD" CHAR(1), 
......etc 
)
PARTITION BY RANGE ("EVENT_START_DATE") 
(PARTITION "ICTPART_DAY_SUM_P20220218"  VALUES LESS THAN (TO_DATE(' 2022-02-19 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) 
NOCOMPRESS LOGGING 
TABLESPACE "TBS_ICTQUO_D" , 
PARTITION "ICTPART_DAY_SUM_P20220219"  VALUES LESS THAN (TO_DATE(' 2022-02-20 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
NOCOMPRESS LOGGING
TABLESPACE "TBS_ICTQUO_D" , 
PARTITION "ICTPART_DAY_SUM_PMAX"  VALUES LESS THAN (MAXVALUE) 
NOCOMPRESS LOGGING 
TABLESPACE "TBS_ICTQUO_D" ) ;

这个表每天都在进行分区,正如您可以通过一个旧的ksh脚本看到的那样。

我想用一个sql脚本继续同样的工作,这个脚本每个月的第一天运行一次,修改那个表,并在30天内每天执行相同的分区。

例如:我们是在2022年3月1日,我想为2022年1月3日、2022年2月3日和2022年3日添加分区。。。。。直到2022年3月31日

该sql脚本将被放入ETL中,ETL每月运行一次,并对进行分区

为什么不去掉ksh脚本并使用INTERVAL PARTITIONs。这样,当在表中插入新的一天时,将自动创建一个新的PARTITION。


CREATE TABLE t1 (     
seq_num NUMBER GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL,
dt   DATE
)
PARTITION BY RANGE (dt)
INTERVAL (NUMTODSINTERVAL(1,'DAY'))
(
PARTITION OLD_DATA values LESS THAN (TO_DATE('2022-01-01','YYYY-MM-DD'))
);
/
INSERT into t1 (dt)
with dt (dt, interv) as (
select date '2022-01-01', numtodsinterval(1,'DAY') from dual
union all
select dt.dt + interv, interv from dt
where dt.dt + interv < date '2022-02-01')
select dt from dt;
/

最新更新