希望有人能帮忙,我正在将DBMS_JOBS更改为DBMS_SCHEDULER作业。目前,我们的DBMS_JOB使用INTERVAL函数,该函数查询一个带有运行时间列表的表,并从SYSDATE返回下一个时间。时间在一天中并不是均匀分布的,所以使用'FREQ= HOURLY'之类的东西不太有效。
我找不到任何类似的东西来为计划程序作业执行此操作。我错过了什么吗?
提前感谢:)
-- DBMS_JOB
INTERVAL = stk_HHD.SetNext
--Interval Function
FUNCTION SetNext
RETURN DATE
IS
PfldNext DATE;
BEGIN
SELECT MIN(MOD(MOD(transfer-SysDate,1)+1,1))+SysDate INTO PfldNext
FROM stk_Schedule
WHERE source = 'HHD'
;
RETURN NVL(PfldNext,TRUNC(SysDate,'MI')+1);
END SetNext;
-- Data
SOURCE TRANSFER
------ ------------------
HHD 01-APR-08 02:45:00
HHD 01-APR-08 06:45:00
HHD 01-APR-08 08:15:00
HHD 01-APR-08 09:45:00
HHD 01-APR-08 11:15:00
HHD 01-APR-08 12:45:00
HHD 01-APR-08 14:15:00
HHD 01-APR-08 15:45:00
HHD 01-APR-08 17:15:00
字符串
编辑:添加了更多细节。
3条答案
按热度按时间bprjcwpo1#
DBMS_SCHEDULER
作业支持旧版DBMS_JOB
间隔语法。虽然他们有一个更新的更强大的语法可用,遗留工作得很好,对于那些习惯它可能更简单的工作(我发现这是我自己的情况)。至于调用一个函数,它也可以工作:
字符串
至少在19c中是这样的。它动态执行
repeat_interval
代码,该代码触发一个函数并返回一个日期,该日期将成为下一个运行日期。3hvapo4f2#
也许基于事件的调度程序作业可以解决您的问题。
示例详细信息在下面的链接中给出。
字符串
Event Based Job Example
r3i60tvu3#
根据您提供的计划,您可以创建两个计划并将它们合并
字符串
然后,您可以在工作中使用此计划。