oracle中的异步操作

发布于 2024-10-01 14:11:39 字数 259 浏览 0 评论 0原文

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

这是我的情况: 我有一个昂贵的进程(假设运行需要 30 分钟)。我有一个基于网络的前端来控制这个过程的运行时间。我正在寻找从前端触发 proc 的运行,而不是真正等待 proc 完成。即,控件应该返回到 Web 应用程序,状态为“正在进行”。 我专门寻找一种机制,可以将控制权交还给前端,而无需等待过程完成执行。

预先感谢,

SK

Is there anyway one can run async operations in oracle.

Here is my situation:
I have an expensive proc (say it takes 30 mins to run). I have a web-based front-end that controls when this proc to run. I am looking for triggering the running of the proc from the front-end, and not really wait for the proc to complete.i.e., the control should come back to the web application, with a status like say "In progress".
I am specifically looking for a mechanism to get control back to the front-end without waiting for the proc to complete execution.

Thanks in advance,

SK

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心头的小情儿 2024-10-08 14:11:39

我赞同 OMG Ponies 要求提供更多细节的要求。

根据您想要完成的任务,您可能需要查看 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 传输文件),则效果非常好。

I'd second OMG Ponies's request for more specifics.

Depending on what you are trying to accomplish, you may want to look into the DBMS_JOBS package. That allows you to submit a job to the database that runs asynchronously. If you want the database to do something computationally expensive in response to a GUI, for example, your front end could execute something like

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;

That would submit a background job to run SOME_EXPENSIVE_PROCEDURE, passing in P_SOME_PARAMETER. The job would not start until the underlying transaction commits which is excellent if SOME_EXPENSIVE_PROCEDURE does something that cannot be rolled back like sending email or FTP-ing a file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文