1. 程式人生 > >Oracle 數據庫添加定時事件

Oracle 數據庫添加定時事件

每年 時間 back exception 觸發 others reat rollback begin

程序設計中可能會碰到想要定時執行某段操作的情況,例如:

    每月清空某張表的數據;

    每年重新提取一次某張表的數據等。

這種情況可以通過設置數據庫的定時任務來實現,步驟如下:

(1)首先檢查數據庫進程數 為0標識不運行job

    show parameter Job_queue_processes        //檢查進程數語句 (命令窗口執行)
            如果value的值是0,那麽執行如下命令:
        alter system set job_queue_processes=10 scope=both    //設置進程數

(2)創建存儲過程(要定時執行的操作)

CREATE OR REPLACE PROCEDURE PAK_YCSY_UPDATE (nian varchar2)

                   IS

                   BEGIN

                         delete from YCSY_JSGZYF where DBND=nian;

                         insert into YCSY_JSGZYF select JSLB,DBMJ,nian,SEQ from YCSY_JSGZYF where YCSY_JSGZYF.DBND=to_number(nian)-
1; commit; exception when others then rollback; END ;

(3)制定定時任務

                  var job_num number;

                   begin

                            dbms_job.submit(:job_num,PAK_YCSY_UPDATE (substr(sysdate,1,4));
,SYSDATE,TRUNC(LAST_DAY(SYSDATE))+1+2/24); end; / PAK_YCSY_UPDATE (substr(sysdate,1,4)); :調用存儲過程 TRUNC(LAST_DAY(SYSDATE))+1+2/24 :觸發間隔時間 ADD_MONTHS(trunc(sysdate,yyyy),12)+1/24 每年1月1日1點 ADD_MONTHS(trunc(sysdate,yyyy),6)+1/24 每年7月1日和1月1日淩晨1點 TRUNC(ADD_MONTHS(SYSDATE,3),Q) + 1/24 每季度的第一天淩晨1點執行 TRUNC(LAST_DAY(SYSDATE))+1+1/24 每月1日淩晨1點執行 TRUNC(next_day(sysdate,星期一))+1/24 每周一淩晨1點執行 TRUNC(sysdate+ 1) +1/ (24) 每天定時執行 TRUNC(sysdate,hh) + 1/ (24) 每小時執行 TRUNC(sysdate,mi) + 1/ (24*60) 每分鐘執行

註意:執行完成後提交。

(4)查看定時任務

select*from dba_jobs

(5)刪除定時任務

 exec dbms_job.remove(24);             //括號中為任務編號

Oracle 數據庫添加定時事件