我有一个带有不同工作的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点之间运行(在06:00至06:00之间)。
我的第一个想法(和最后一个选择)是一项额外的工作,它将主要工作设置为在晚上8点到早上6点之间“破损”。但我不喜欢不同工作的想法。
谢谢!
答案 0 :(得分:3)
您可以在间隔中使用案例陈述来检查一天中的时间,然后跳过:
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
虽然......认为我们现在已经坚定地处于“正确的功能”阶段。 :)
答案 1 :(得分:2)