Oracle定時計畫快速使用

2021-12-30 10:31:23 字數 2831 閱讀 2921

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是為了儲存建立生成的計畫的唯一標識號,方便刪除,檢視該定時計畫的相關資訊

1.2.1 dbms_job.submit() 說明

proceduresubmit (

job out binary_ineger,

whatinvarchar2,

next_date indate,

intervalinvarchar2,

no_parseinbooean:=false)

這個過程有五個引數:job、what、next_date、interval與no_parse。

ljob引數是由submit()過程返回的binary_ineger。這個值用來唯一標識job。

lwhat引數是將被執行的pl/sql**塊(一般多是儲存過程)。

lnext_date引數指識何時將執行這個工作。

linterval引數何時這個工作將被重執行。

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"))) + (660+10)/(2460)'

不再執行該任務並刪除它 null

lno_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;

begin

for v in(select job from user_jobs) loop

dbms_job.remove(v.job);

end loop;

commit;

end;

begin

for v in(select job from user_jobs where whatin( 'the_what_name;' ) )

loop

dbms_job.remove(v.job);

endloop;

commit;

end;

/begin

for v in(select job from user_jobs wherelog_user='user***x') loop

dbms_job.remove(v.job);

end loop;

commit;

end;

/

spring 定時計畫

定時表示式 cronexpresession的設定格式,附下 字段 允許值 允許的特殊字元 秒 0 59 分 0 59 小時 0 23 日期 1 31 l w c 月份 1 12 或者 jan dec 星期 1 7 或者 sun sat l c 年 可選 留空,1970 2099 表示式 意義 0 ...

Scheduled定時計畫

springboot整合了 scheduled的相關依賴 org.springframework.scheduling.annotation.scheduled 我們只需要直接使用即可。注意 spring的定時任務預設是單執行緒的。如果有多個定時任務,那麼執行起來時間會有問題 這時就需要 開啟多執行...

ORACLE實現Job定時計畫任務

在oracle資料庫操作中,有時候我們需要定時的執行某些儲存過程。那oracle如何實現呢?從oracle 10.1版本開始,oracle開發了乙個新的包dbms scheduler。這個包就能幫解決我們的定時計畫任務的問題。1.job建立例項 begin dbms scheduler.create...