2010-12-09 98 views
2

嘿家伙, 我想知道如何在Oracle APEX中创建作业调度程序?dbms_job/Oracle作业调度程序

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

如果你们可以用我的方式提出一些建议,我会很感激!

干杯 丰富

回答

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; 

程序升级所有符合条件的门票和匿名块创建每分钟运行一次程序的工作。每一分钟运行的单个作业(或者每隔几分钟取决于您长时间的容差,您可以等待升级一张票)比单独的作业更容易管理,因为每张票在提交后一小时内运行。

现在,如果您想要更复杂一些,DBMS_SCHEDULER软件包提供了很多DBMS_JOB软件包所不具备的功能。它提供了一些自动日志记录功能,它提供了链接作业的能力,定义作业执行和不运行的各种窗口(例如,如果票据是在5:30创建的,则可能不想在6:30升级它,因为它是在几小时之后)等。而DBMS_SCHEDULER是Oracle正在转向的方向。但我仍然发现自己使用DBMS_JOB来完成这样相对简单的任务。

+0

`DBMS_JOB`的一个很好的特性就是你可以从表格触发器创建一个作业 - 如果这是你的风格:)。所以调用过程只需插入票据,并且表格上的触发器会创建一个工作来升级它。 – 2010-12-10 02:37:58

1

退房我用由Justin具有良好的上市成功的方法中,材料here

1

。运行良好的另一种方法是使用延迟交付的队列。这使您可以拥有外部分页程序或等待队列升级的功能。我对APEX并不熟悉,所以我不确定在这种情况下这是否是一个好主意。