【问题标题】:Calling an Oracle Stored Procedure from PHP without Waiting for the Procedure to Finish从 PHP 调用 Oracle 存储过程而不等待过程完成
【发布时间】:2014-03-31 09:55:45
【问题描述】:

PHP 5.2.5 - 甲骨文 11

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

【问题讨论】:

    标签: php sql oracle stored-procedures


    【解决方案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;
    

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

    【讨论】:

    • 这听起来很有希望。我会检查一下,但你能告诉我这个吗?我目前正在将参数传递给存储过程。是否有向 dbms_job 发送参数的机制?
    • @Jeff - 使用dbms_job,您需要将参数放在作为第二个参数传递的字符串中,即'BEGIN procedure_name( ''' || some_string_parameter || ''' ); END;'。如果您使用dbms_scheduler定义作业,您可以使用参数定义它,然后在执行作业之前设置参数。
    猜你喜欢
    • 2017-05-21
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多