2010-12-09 97 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並不熟悉,所以我不確定在這種情況下這是否是一個好主意。