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