大家好,我想知道您如何在 Oracle APEX 中创建作业调度程序?
我正在制作一个管理呼叫的系统,每个呼叫都有一个严重级别。一小时后,严重性级别应升级。我已经搜索了几个小时,我想我需要创建一个定义作业调度程序然后运行更新的过程?
如果你们能以我的方式提出一些建议,我将不胜感激!
干杯丰富
大家好,我想知道您如何在 Oracle APEX 中创建作业调度程序?
我正在制作一个管理呼叫的系统,每个呼叫都有一个严重级别。一小时后,严重性级别应升级。我已经搜索了几个小时,我想我需要创建一个定义作业调度程序然后运行更新的过程?
如果你们能以我的方式提出一些建议,我将不胜感激!
干杯丰富
在我看来,可能可行的最简单的解决方案是
CREATE PROCEDURE escalate_cases
AS
BEGIN
UPDATE tickets
SET status = 'ESCALATED'
WHERE status = 'NOT ESCALATED'
AND open_date < sysdate - interval '1' hour;
END escalate_cases;
DECLARE
l_jobno PLS_INTEGER;
BEGIN
dbms_job.submit(
l_jobno,
'BEGIN escalate_cases(); END;',
sysdate + interval '1' minute,
'sysdate + interval ''1'' minute'
);
dbms_output.put_line( 'Job ' || l_jobno || ' submitted.' );
commit;
END;
该过程会升级所有符合您标准的票证,并且匿名块会创建一个每分钟运行该过程的作业。每分钟运行的单个作业(或每隔几分钟,取决于您的容忍度,您可以等待升级工单)将比在提交后正好 1 小时运行的每个工单的单独作业更容易管理.
现在,如果您想要更复杂一点,DBMS_SCHEDULER 包提供了很多 DBMS_JOB 包没有的功能。它提供了一些自动日志记录,它提供了链接作业的能力,定义作业运行和不运行的各种窗口(即,如果在 5:30 创建工单,您可能不想在 6:30 升级它,因为它是下班后)等。 DBMS_SCHEDULER 是 Oracle 正在移动的方向。但是我仍然发现自己使用 DBMS_JOB 来完成像这样相对简单的任务。
我已经成功使用了 Justin 列出的方法。另一种行之有效的方法是使用延迟交付的队列。这使您能够拥有外部寻呼程序或在队列中等待升级的东西。我对 APEX 不太熟悉,所以我不确定在这种情况下这是否是个好主意。
在这里查看材料