oracle中的异步操作

时间:2010-11-08 22:04:50

标签: oracle asynchronous odp.net

无论如何都可以在oracle中运行异步操作。

  

这是我的情况:   我有一个昂贵的过程(说运行需要30分钟)。我有一个基于Web的前端,控制此proc运行的时间。我正在寻找从前端触发proc的运行,而不是真的等待proc完成。即,控件应该返回到Web应用程序,状态如“正在进行中”。   我特意寻找一种机制来控制回到前端,而不必等待proc完成执行。

提前致谢,

SK

1 个答案:

答案 0 :(得分:8)

我的第二个OMG小马要求更具体的细节。

根据您要完成的任务,您可能需要查看DBMS_JOBS包。这允许您将作业提交到异步运行的数据库。例如,如果您希望数据库在响应GUI时做一些计算成本高昂的事情,那么您的前端可以执行类似

的操作
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文件),则直到底层事务提交才会启动作业。