2010-11-08 180 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