php - ORACLE + PHP oci_execute() 卡住并且不返回任何内容

标签 php oracle codeigniter

我正在尝试使用下面的代码执行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/

相关文章:

sql - 使用花括号和通配符转义 Oracle 文本

java - JDBC 连接协议(protocol)不受支持

java - 甲骨文 JDBC 瘦 : enforce network encryption

php - 将变量从 Controller 传递到 CodeIgniter 中的 View

php - 在 Codeigniter 迁移中添加外键

php - symfony 2 - 尝试调用类 "findBy"的名为 "testBundle\Entity\test"的未定义方法

php 数组中的下拉列表未填充

php - 获取 Laravel 数据库连接以处理单个 PHP 脚本

PHP 将 "Call to a member function on a non-object"变成异常

php - CodeIgniter。允许的内存大小错误和分页