我正在尝试使用下面的代码执行oracle SQL语句。
$ofe_id = '123';
$stmt = oci_parse($this->db->conn_id, "DECLARE
l_retval VARCHAR2(255);
l_message VARCHAR2(2000);
BEGIN
l_retval := offerte.fill_temp_fields(:ofe_id,l_message);
END;") or die("Cannot parse query");
oci_bind_by_name($stmt, ':ofe_id', $ofe_id);
// $err = oci_error($stmt); //It return 'false';
$respose = oci_execute($stmt, OCI_DEFAULT);
我在 Ubuntu 14.0x 上使用 PHP 5.6。 当我尝试执行上面的语句时。它卡住并且不返回任何内容。
当我尝试调试代码时,我发现它执行到 oci_execute() ,之后它不会执行下一个代码。我等了 30 分钟,但似乎没有返回任何回复。
最佳答案
您可能打开了另一个 Oracle session ,并且您的表周围有一些锁。
抱歉,我不是专家,但我曾经在从 PHP-Apache 和 PHP-CLI 中同时测试 Oracle 功能时遇到过类似的问题,并且打开了几个不同的 SQL+ 提示符(例如 SYSDBA、模式所有者和非特权用户)。提交后“卡住 oci_execute”错误消失。
但是,您应该指定变量的正确类型和大小:
oci_bind_by_name($stmt, ':ofe_id', $ofe_id, -1, SQLT_INT);
^^^^^^^^^^^^
PHP 和 Oracle 都会在数字和数字字符串之间进行静默类型转换,但有时尾部字符可能会丢失。
关于php - ORACLE + PHP oci_execute() 卡住并且不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52949901/