declare
v_tn varchar2(100) := 'LSDAS'; --决策库名 大写
v_ny varchar2(100) := '201901'; --创建起始分区的时间
v_tpnum number := 60; --增加分区月数 默认五年60个月
v_tp varchar2(100) := ''; -- 决策库表空间 可不指定 可自动获取
v_sql varchar2(4000) := ''; --不要动
v_num number := 1; --不要动
v_t date := to_date(v_ny, 'YYYYMM'); --不要动
begin
select default_tablespace into v_tp from dba_users where username = v_tn;
for rowdata in (select distinct a.table_name from user_tab_partitions a) loop
v_num := 1;
v_t := to_date(v_ny, 'YYYYMM');
loop
BEGIN
exit when v_num > v_tpnum;
v_sql := 'alter table ' || rowdata.table_name ||
' add
partition P_SJQB_' || to_char(v_t, 'YYYYMM') ||
' values (''' || to_char(v_t, 'YYYYMM') || ''')
tablespace ' || v_tp || '
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 1M
next 1M
minextents 1
)';
--dbms_output.put_line(v_sql);
EXECUTE IMMEDIATE v_sql;
v_num := v_num + 1;
v_t := add_months(v_t, 1);
EXCEPTION
WHEN OTHERS THEN
v_num := v_num + 1;
v_t := add_months(v_t, 1);
--DBMS_OUTPUT.PUT_LINE(rowdata.table_name || SQLCODE || '---' ||SQLERRM);
end;
end loop;
end loop;
end;