ORACLE创建、增加分区及每月自动创建新分区表存储过程


创建分区表

create table pdba (id number, ctime date) partition by range (ctime)
(
partition PD_201303 values less than (to_date('2013-04-1', 'yyyy-mm-dd')),
partition PD_201304 values less than (to_date('2013-05-1', 'yyyy-mm-dd')),
partition PD_201305 values less than (to_date('2013-06-1', 'yyyy-mm-dd'))
);

增加分区表

alter table pdba add  partition PD_201306 values less than (to_date('2013-07-01', 'yyyy-mm-dd'));

自动增加分区表存储过程

create or replace procedure timer_auto_add_newpartitions
as
cursor c_parts is
select table_name,max(partition_name) as part_name from user_tab_partitions  group by table_name;


v_tname varchar2(32);
v_pname varchar2(32);
v_sql varchar2(3999);
v_mcurr varchar2(32);
v_npart varchar2(32);
v_tmp varchar2(32);
--v_key varchar2(32);
v_newp date;
begin
for i in c_parts loop

dbms_output.put_line('v_tname:');
dbms_output.put_line('v_pname:');
v_tname := i.table_name;
v_pname := i.part_name;



dbms_output.put_line(v_tname);
dbms_output.put_line(v_pname);
--select column_name into v_key from user_part_key_columns where name = v_tname;


v_mcurr := to_char(sysdate,'yyyymm');
v_npart := substr(v_pname,instr(v_pname,'_')+1);--instr判断下横杠位置然后+1交给substr截取当前分区名称中的年月

--调试过程可以通过dbms_output.put_line显示变量
--dbms_output.put_line需要打开set serveroutput on才能看到结果
--dbms_output.put_line('v_mount_current:');
--dbms_output.put_line(v_mcurr);
--dbms_output.put_line('v_npart:');
--dbms_output.put_line(v_npart);

if v_mcurr = v_npart then          --如果当前月份等于分区中截取出来的月份则开始自动创建下月分区操作
  v_npart := to_char(add_months(to_date(v_npart,'yyyymm'),1),'yyyymm');--生成下月年月
v_newp  := add_months(to_date(v_npart,'yyyymm'),1);--生成下月年月
v_pname := substr(v_pname,1,instr(v_pname,'_'))||v_npart;--构造新分区表名称
v_sql := 'alter table '||v_tname||' add partition '||v_pname||' values less than ('||'to_date('''||to_char(v_newp,'yyyy-mm-dd hh24:mi:ss')||''''||','''||'yyyy-mm-dd hh24:mi:ss'||''')'||')';

dbms_output.put_line(v_sql);
execute immediate v_sql;
end if;
end loop;
end;

 然后配合jobs每月月尾自动执行

另外注意,此脚本只适合于 XXX_201305 特定格式的分区命名才可以自动创建



 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM