oracle中的异步操作

Sas*_*ash 2 oracle asynchronous odp.net

无论如何,有人可以在oracle中运行异步操作.

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

提前致谢,

SK

Jus*_*ave 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;
Run Code Online (Sandbox Code Playgroud)

这将提交后台作业以运行SOME_EXPENSIVE_PROCEDURE,传入P_SOME_PARAMETER.如果SOME_EXPENSIVE_PROCEDURE执行无法回滚的操作(例如发送电子邮件或FTP文件),则直到底层事务提交才会启动作业.