【发布时间】:2019-11-13 20:17:55
【问题描述】:
我试图为 PL/SQL 存储函数绑定 $result 变量,但是
如果我将$result 变量绑定为,它不起作用
oci_bind_by_name($stmt, ':result', $result, -1);
并给出错误消息:
oci_execute(): ORA-06502: PL/SQL: numeric or value error: 字符串缓冲区太小
它也适用于 if 语句:
oci_bind_by_name($stmt, ':result', $result, 1000);
但是我的 PL/SQL 存储函数返回大量数据,所以我想使用最大长度为 -1。
参考表格: https://www.php.net/manual/en/function.oci-bind-by-name.php
1) 最大长度 设置数据的最大长度。如果将其设置为 -1,此函数将使用变量的当前长度来设置最大长度。在这种情况下,当调用 oci_bind_by_name() 时,该变量必须存在并包含数据。
2) Example #10 绑定一个 PL/SQL 存储函数。
$sql = 'BEGIN :result := QUERY(:parameters); END;';
$stmt = oci_parse($this->oracle_db->conn_id,$sql);
oci_bind_by_name($stmt,':parameters',$parameters);
oci_bind_by_name($stmt, ':result', $result, -1);
oci_execute($stmt);
oci_free_statement($stmt);
oci_close($this->oracle_db->conn_id);
错误信息:
oci_execute(): ORA-06502: PL/SQL: numeric or value error: 字符串缓冲区太小
【问题讨论】:
标签: php oracle codeigniter-3 oci8