2

我有一个具有不同工作的 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 点之间“中断”。但我不喜欢换一份工作的想法。

谢谢!

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 回答