从PHP调用Oracle存储过程而不等待过程完成

时间:2014-02-27 18:41:54

标签: php sql oracle stored-procedures

PHP 5.2.5 - Oracle 11

我有一个启动Oracle存储过程的PHP网页。此过程需要几分钟才能运行,我想通过检查数据库中的当前值来显示进程的当前状态,并在网页每隔几秒刷新一次时显示它们。存储过程运行正常但是oci_execute似乎必须在PHP脚本继续之前等待结果。有没有办法在没有oci_execute等待结果的情况下启动这个存储过程?

1 个答案:

答案 0 :(得分:1)

您的PHP脚本可以使用dbms_jobdbms_scheduler包生成在单独会话中运行该过程的作业。

DECLARE
  l_jobno pls_integer;
BEGIN
  dbms_job.submit( l_jobno,
                   'BEGIN <<your procedure call>> END;',
                   sysdate + interval '1' second );
  commit;
END;

提交作业后会立即返回。该过程将无法在您的会话中看到任何未提交的更改,并且您的会话将无法查看该过程所做的任何未提交的更改。这可能需要更多的工作来确保可以在正确使用事务的同时监视过程的执行。