程序設計中可能會碰到想要定時執行某段操做的狀況,例如:數據庫
每個月清空某張表的數據;spa
每一年從新提取一次某張表的數據等。設計
這種狀況能夠經過設置數據庫的定時任務來實現,步驟以下:code
(1)首先檢查數據庫進程數 爲0標識不運行jobblog
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)制定定時任務rem
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) 每分鐘執行
注意:執行完成後提交。it
(4)查看定時任務io
select*from dba_jobs
(5)刪除定時任務 程序設計
exec dbms_job.remove(24); //括號中爲任務編號