我正在建立一个管理呼叫的系统,每个呼叫都有一个严重级别。一小时后,应升级严重性级别。我搜索了几个小时,我想我需要创建一个定义作业调度程序然后运行更新的过程?
如果你们可以按我的方式提出一些建议,我会很感激!
干杯 富
答案 0 :(得分: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来完成这样相对简单的任务。
答案 1 :(得分:1)
查看材料here
答案 2 :(得分:1)
我使用Justin列出的方法取得了很好的成功。另一种运行良好的方法是使用延迟传递的队列。这使您能够使用外部分页程序或等待队列进行升级。我对APEX并不熟悉所以我不确定在这种情况下这是不是一个好主意。