SQLServer中有相關的定時計劃,可以直接打開sql server 的任務管理器進行配置,可以方便、快速實現定時執行相應任務。相應的Oracle也有對應的定時計劃,只不過沒有一個很好的圖形界面供用戶去操作。本文主要是為了方便用戶在Oracle中快速創建定時計劃,定期執行相應的sql或者存儲過程。
說明:以下所有的示例代碼,都需要用戶先連上sql/plus之後,在sql/plus中執行。
存儲過程不是必須的,只不過是把相關的一系列的sql語句整合在一塊,方便執行。
示例:
create or replace procedureupdate_black_gray_list as
begin
UPDATE SMS_BLACKLIST //要執行的sql語句
SET FLAG='0',"ENABLE"='2',
FDATE=TO_DATE(TO_DATE(TO_CHAR(SYSDATE,'yyyy-mm-dd'), 'yyyy-mm-dd')),
TDATE=TO_DATE(TO_DATE(TO_CHAR(SYSDATE+7,'yyyy-mm-dd'), 'yyyy-mm-dd'))
WHERE FLAG='0' AND "ENABLE"='0'AND
TDATE
end;
/
示例:
variable update_list_job number;
begin
dbms_job.submit(:update_list_job,'update_black_gray_list;',TRUNC(SYSDATE),'TRUNC(SYSDATE+1)');
end;
/
變量update_list_job是為了存儲創建生成的計劃的唯一標識號,方便刪除,查看該定時計劃的相關信息
PROCEDUREsubmit (
job OUT binary_ineger,
whatINvarchar2,
next_date INdate,
intervalINvarchar2,
no_parseINbooean:=FALSE)
這個過程有五個參數:job、what、next_date、interval與no_parse。
l job參數是由Submit()過程返回的binary_ineger。這個值用來唯一標識job。
l what參數是將被執行的PL/SQL代碼塊(一般多是存儲過程)。
l next_date參數指識何時將運行這個工作。
l interval參數何時這個工作將被重執行。
interval是指上一次執行結束到下一次開始執行的時間間隔,當interval設置為null時,該job執行結束後,就被從隊列中刪除。假如我們需要該job周期性地執行,則要用‘sysdate+m’表示。
示例:
每天運行一次'SYSDATE + 1'
每小時運行一次 'SYSDATE +1/24'
每分鐘運行一次 'SYSDATE + 1/(60*24)'
每秒運行一次 'SYSDATE + 1/(60*24*60)'
每隔一星期運行一次 'SYSDATE + 7'
每天午夜12點 'TRUNC(SYSDATE+ 1)'
每天早上1點30分 'TRUNC(SYSDATE+ 1) + (1*60+30)/(24*60)'
每星期二中午12點'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
每個月第一天的午夜12點 'TRUNC(LAST_DAY(SYSDATE ) + 1)'
每個季度最後一天的晚上11點 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' )-1/24'
每星期六和日早上6點10分 'TRUNC(LEAST(NEXT_DAY(SYSDATE,''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'
不再運行該任務並刪除它 NULL
l no_parse參數指示此工作在提交時或執行時是否應進行語法分析(默認為false)——TRUE指示此PL/SQL代碼在它第一次執行時應進行語法分析,而FALSE指示本PL/SQL代碼應立即進行語法分析。
示例:
begin
dbms_job.run(:update_list_job);
end;
/
示例:
begin
dbms_job.remove(:update_list_job);
end;
/
select * from user_jobs;