![](/img/trans.png)
[英]Oracle DBMS_Scheduler RUN DBMS_JOB on 9:10AM and 11:30 AM Daily
[英]Oracle dbms_job: job have to run only weekday 6am-8pm
我有一個具有不同作業的 oracle 10g 數據庫。 其中一項工作必須每兩個小時運行一次。 因此“next_dat”和“interval”參數看起來像這樣。
,next_date => to_date('27.04.2011 10:18:00','dd/mm/yyyy hh24:mi:ss')
,interval => 'to_date(to_char(sysdate + (2/24), ''DD.MM.YYYY HH24:MI''), ''DD.MM.YYYY HH24:MI'')'
這些作業不需要在晚上運行。 所以問題是:是否有可能以這種方式設計例如“間隔”,即作業僅在上午 6 點到晚上 8 點之間運行(在 hh24 06:00 到 20:00 之間)。
我的第一個想法(也是最后一個選擇)是一項附加工作,它將主要工作設置為在晚上 8 點到早上 6 點之間“中斷”。 但我不喜歡換一份工作的想法。
謝謝!
您可以在間隔中使用 case 語句來檢查一天中的時間,然后跳過:
case
when to_char(trunc(sysdate, 'HH24') + 2/24, 'HH24') between '06' and '20' then
trunc(sysdate, 'HH24') + 2/24
else
trunc(sysdate)+1+(6/24)
end
這可以擴展到包括工作日的支票。 (您需要小心檢查星期幾,因為它取決於 NLS 設置。)
像下面這樣的東西可以處理工作日,但你必須確認邊緣情況並檢查你的 NLS 設置(對我來說,星期一是第 1 天,星期日是第 7 天):
case
when
to_number(to_char(sysdate, 'D')) between 1 and 5 then
case
when to_char(trunc(sysdate, 'HH24') + 2/24, 'HH24') between '06' and '20'
then
trunc(sysdate, 'HH24') + 2/24
else
trunc(sysdate)+1+(6/24)
end
else
trunc(sysdate) + (8 - to_number(to_char(sysdate, 'D'))) + 6/24
end
雖然......認為我們現在正處於“糾正功能的時間”階段。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.