Script:创建一个job,通过存储过程定期删除数据的脚本

来源:互联网 发布:unreal engine 源码 编辑:程序博客网 时间:2024/05/17 06:38
------脚本出自《让oracle跑的更快2》,谭怀远

create or replace procedure drop_partition as
 v_part_name varchar2(100);----要添加分区表的名称前缀
 v_over_time   number;          ----过期时间间隔
 v_err_num      number;          ----ORA错误号
 v_err_msg       varchar2(100); -----错误描述
begin
-----得到时间最早的分区
select min(partition_name) into v_part_name from user_tab_partitions where table_name='SALE_DATA';

-----取得时间最早的分区到当前的时间间隔
select months_between(sysdate,to_date(substr(min(partition_name),7,8),'yyyy-mm')) into
v_over_time from user_tab_partitions where table_name='SALE_DATA';


-----删除最早的分区
if v_over_time>12 then
execute immediate 'alter table sale_data drop partition  '||v_part_name;
end if;

exception
when others then
         v_err_num :=SQLCODE;
         v_err_msg :=SUBSTR(SQLERRM,1,100);
         dbms_output.put_line('执行错误: '  ||v_err_num ||  '错误描述: '||  v_err_msg);
end drop_partition;


创建一个job,每天执行一次:

declare
     job   number;
begin
    dbms_job.submit(job,'drop_partition;',sysdate,'sysdate+1');
end;