无论如何都可以在oracle中运行异步操作。
这是我的情况: 我有一个昂贵的过程(说运行需要30分钟)。我有一个基于Web的前端,控制此proc运行的时间。我正在寻找从前端触发proc的运行,而不是真的等待proc完成。即,控件应该返回到Web应用程序,状态如“正在进行中”。 我特意寻找一种机制来控制回到前端,而不必等待proc完成执行。
提前致谢,
SK
答案 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文件),则直到底层事务提交才会启动作业。