2010-11-08 157 views
2

有沒有人可以在oracle中運行異步操作。oracle中的異步操作

這是我的情況: 我有一個昂貴的過程(說它需要30分鐘運行)。我有一個基於Web的前端,可以控制何時運行該進程。我正在尋找從前端觸發proc的運行,而不是真的等待proc完成。也就是說,控制應該返回到web應用程序,並具有狀態「正在進行」。 我正在尋找一種機制來讓控制權返回到前端,而無需等待proc完成執行。

由於提前,

SK

+3

你能更具體嗎? – 2010-11-08 22:09:52

回答

8

我願意爲更多的細節第二OMG小馬的要求。

根據您要完成的操作,您可能需要查看DBMS_JOBS包。這允許您將作業提交到異步運行的數據庫。如果你希望數據庫做一些響應計算昂貴的圖形用戶界面,例如,您的前端可以執行類似

CREATE OR REPLACE PROCEDURE run_asynchronously(p_some_parameter IN PLS_INTEGER, 
               p_jobno OUT PLS_INTEGER) 
AS 
BEGIN 
    dbms_job.submit(p_jobno, 
        'BEGIN ' || 
         ' some_expensive_procedure(' || 
           to_char(p_some_parameter) || '); ' || 
        'END;'); 
    RETURN p_jobno; 
END; 

這將提交後臺作業運行SOME_EXPENSIVE_PROCEDURE,傳遞P_SOME_PARAMETER。如果SOME_EXPENSIVE_PROCEDURE執行的某些事情無法像發送電子郵件或FTP文件那樣回滾,那麼作業將不會啓動,直到基礎事務提交非常好。

+1

+1。儘管我建議你先看看DBMS_SCHEDULER。它有點強大,但它自動提交作業,所以有時候你仍然需要DBMS_JOB。 – 2010-11-09 06:46:02