簡體   English   中英

Oracle dbms_job:作業只能在工作日早上 6 點到晚上 8 點運行

[英]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 

雖然......認為我們現在正處於“糾正功能的時間”階段。 :)

將區間設為 function,然后您可以進行任何您喜歡的控制。

請參閱此處的示例:

http://www.orafaq.com/node/871

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM