日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

job每小时执行一次 oracle_oracle job定时执行

發布時間:2024/1/1 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 job每小时执行一次 oracle_oracle job定时执行 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

oracle中準確控制job的下次運行時間(next date)

用過ORACLE的JOB的朋友也許都能夠感覺到它的強大,和JAVA中的quartz有異曲同工之妙,可以少了很多的重復勞動;但是也會有許多問題,就是執行時間段和執行時間比較不容易確定。這其實都是我們還不熟悉JOB的interval造成的。

我碰到過幾種用JOB的情況,從簡到煩說三種:

1。最簡單的,一個隔一段時間執行一次,沒有其它限制。

interval: sysdate+2 每隔2天執行一次

sysdate+1/2 每隔12小時執行一次

sysdate+3/1440 每隔 3 分鐘執行一次

2。簡單的定時執行。

interval: trunc(sysdate+1)+1/3 每天的8點運行

3。要定時間段執行的。

interval: case when to_number(to_char(sysdate,'hh24'))&gt=8 and to_number(to_char(sysdate,'hh24'))&lt=20 then sysdate+15/1440 else trunc(sysdate+1)+1/3 end

每天的8點到20點之點,每隔15分鐘運行一次,其余的每天的早上8點運行。

case when to_number(to_char(sysdate,'mm'))&gt=6 and to_number(to_char(sysdate,'mm'))&lt=10 then trunc(sysdate+30) else trunc(sysdate+1)+1/6 end

6-10月份,每隔30天的凌晨開始運行,其余月份每隔一天早上4點運行

4。最困難的,每次運行都要求在指定時間

如3第一個,要求不僅是在每天的8點到20點之點,每隔15分鐘運行一次,而且都要在0分,15分,30分,45分運行。

困難在ORACLE的JOB機制,它的下次運行時間是在你的任務跑完以后才計算的。你的任務或多或少都會花些時間,這就導致下次運行時間不準。 比如,第一次運行是在 8:00:00,任務運行時間 10秒,那么下次的運行時間就是變成了 8:15:10(因為當時的sysdate+15/1440就是8:15:10),而不是希望的 8:15:00,這樣多跑幾次,就會造成很大的出入。

解決辦法還是用job的interval,它不僅支持象 3 這樣的sql語句,而且還支持函數,這樣功能就強了。

寫一個函數 fn_get_myjob_interval

create or replace function fn_get_myjob_interval(now date) return date is

Result date;

v_n_min number;

v_n_hour number;

v_n_all date;

begin

v_n_min:= to_number(to_char(now,'mi'));

v_n_hour:=to_number(to_char(now,'hh24'));

if v_n_hour&gt=20 then

result:=trunc(sysdate+1)+1/3;

else

v_n_all:=trunc(sysdate);

if v_n_min&gt=0 and v_n_min&lt15 then

result:=v_n_all+(v_n_hour*60+15)/1440;

elsif v_n_min&gt=15 and v_n_min&lt30 then

result:=v_n_all+(v_n_hour*60+30)/1440;

elsif v_n_min&gt=30 and v_n_min&lt45 then

result:=v_n_all+(v_n_hour*60+45)/1440;

else

result:=v_n_all+(v_n_hour+1)*60/1440;

end if;

end

總結

以上是生活随笔為你收集整理的job每小时执行一次 oracle_oracle job定时执行的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。