2

私はさまざまな仕事をしているoracle10gデータベースを持っています。それらのジョブの1つは、2時間ごとに実行する必要があります。したがって、「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時の間に「壊れた」状態に設定する追加ジョブです。しかし、私は別の仕事のアイデアが好きではありません。

ありがとうございました!

4

2 に答える 2

3

間隔内で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 

しかし...私たちは今、しっかりと「機能を正す時」の段階にあると思います。:)

于 2011-04-27T08:46:57.977 に答える
2

間隔を関数にすると、好きなように制御できます。

例については、こちらをご覧ください。

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

于 2011-04-27T08:34:43.927 に答える