記一則自動刪除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完成了,上述中的表都是測試表,如有不足,還請賜教

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章