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 特定格式的分区命名才可以自动创建



 

转载于:https://www.cnblogs.com/cycsa/archive/2013/06/04/3116839.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值