Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在不等待过程完成的情况下从PHP调用Oracle存储过程_Php_Sql_Oracle_Stored Procedures - Fatal编程技术网

在不等待过程完成的情况下从PHP调用Oracle存储过程

在不等待过程完成的情况下从PHP调用Oracle存储过程,php,sql,oracle,stored-procedures,Php,Sql,Oracle,Stored Procedures,PHP5.2.5-Oracle 11 我有一个PHP网页,它启动了一个Oracle存储过程。这个过程需要几分钟才能运行,我希望通过检查数据库中的当前值来显示进程的当前状态,并在网页每隔几秒钟刷新时显示它们。存储过程运行正常,但oci_execute似乎必须等待结果,然后PHP脚本才能继续。有没有一种方法可以启动此存储过程,而oci_execute不必等待结果?您的PHP脚本可以生成一个作业,使用dbms_作业或dbms_调度程序包在单独的会话中运行该过程 DECLARE l_jobno pl

PHP5.2.5-Oracle 11


我有一个PHP网页,它启动了一个Oracle存储过程。这个过程需要几分钟才能运行,我希望通过检查数据库中的当前值来显示进程的当前状态,并在网页每隔几秒钟刷新时显示它们。存储过程运行正常,但oci_execute似乎必须等待结果,然后PHP脚本才能继续。有没有一种方法可以启动此存储过程,而oci_execute不必等待结果?

您的PHP脚本可以生成一个作业,使用
dbms_作业
dbms_调度程序
包在单独的会话中运行该过程

DECLARE
  l_jobno pls_integer;
BEGIN
  dbms_job.submit( l_jobno,
                   'BEGIN <<your procedure call>> END;',
                   sysdate + interval '1' second );
  commit;
END;
声明
l_作业编号pls_整数;
开始
dbms_作业。提交(l_作业编号,
“开始-结束;”,
系统日期+间隔“1”秒);
犯罪
结束;

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

这听起来很有希望。我会查一下,但你能告诉我这个吗;我目前正在向存储过程传递参数。是否有向dbms_作业发送参数的机制?@Jeff-使用
dbms_作业
,您需要将参数放入作为第二个参数传递的字符串中,即
“BEGIN procedure_name(“”“| | |某些|字符串|参数|“”);结束;'。如果使用
dbms\u调度程序定义作业
,则可以使用参数定义作业,然后在执行作业之前设置参数。