记一则自动删除x天前数据并插入历史表的procedure

原因:由于某张表每天数据量过几十万,现在需要把这张表的数据只保留40天,40天之前的数据插入历史表,每天早上六点执行该过程。
首先定义一个执行计划: 测试使用,每五分钟执行一次

variable  job_number number; 
begin
  sys.dbms_job.submit(:job_number,   
                      what => 'DEL_T1;',
                      next_date => to_date('09-05-2018 17:20:00', 'dd-mm-yyyy hh24:mi:ss'),
                      interval => 'sysdate + 5/1440');
  commit;
end;
/

我要记录每次操作该表是的时间,所以我要在建一个记录时间的table和一个自增的sequence序列

create   sequence APPADMIN.seq_del_t1_log increment by 1 start with 1 nocache;

create  table APPADMIN.del_t1_log (id number,ins_date timestamp(2),del_date timestamp(2),finsh_date timestamp(2));

最后创建procedure

CREATE OR REPLACE PROCEDURE DEL_T1 IS
BEGIN
insert into APPADMIN.del_t1_log(id,ins_date) values(seq_del_t1_log.nextval,sysdate);--插入准备执行的时间
    INSERT INTO TEST.TEST2
    select * from TEST.test1 
        where localdate<=to_char(sysdate-30,'yyyymmdd');--插入数据到历史表
          COMMIT;
            UPDATE APPADMIN.del_t1_log SET del_date=sysdate where id=(select max(id) id from  APPADMIN.DEL_T1_LOG );--完成插入历史表更新时间
          COMMIT;
    delete TEST.test1 
        where localdate<=to_char(sysdate-30,'yyyymmdd');--删除已经备份的历史数据
          COMMIT;
            UPDATE APPADMIN.del_t1_log SET finsh_date=sysdate where id=(select max(id) id from  APPADMIN.DEL_T1_LOG );--完成删除之后更新时间
          COMMIT;
END DEL_T1;

ok完成了,上述中的表都是测试表,如有不足,还请赐教

转载于:https://blog.51cto.com/zjwbk/2115118

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值