2

大家好,我想知道您如何在 Oracle APEX 中创建作业调度程序?

我正在制作一个管理呼叫的系统,每个呼叫都有一个严重级别。一小时后,严重性级别应升级。我已经搜索了几个小时,我想我需要创建一个定义作业调度程序然后运行更新的过程?

如果你们能以我的方式提出一些建议,我将不胜感激!

干杯丰富

4

3 回答 3

3

在我看来,可能可行的最简单的解决方案是

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 来完成像这样相对简单的任务。

于 2010-12-09T21:46:59.227 回答
1

我已经成功使用了 Justin 列出的方法。另一种行之有效的方法是使用延迟交付的队列。这使您能够拥有外部寻呼程序或在队列中等待升级的东西。我对 APEX 不太熟悉,所以我不确定在这种情况下这是否是个好主意。

于 2010-12-09T23:47:10.133 回答
1

在这里查看材料

于 2010-12-09T22:21:12.140 回答