PHP oci_bind_by_name 绑定函数 return 参数 -1 无效
PHP oci_bind_by_name binding function return parameter with -1 not working
我试图为 PL/SQL 存储函数绑定 $result
变量,但是
如果我将 $result
变量绑定为
它不起作用
oci_bind_by_name($stmt, ':result', $result, -1);
并给出错误消息:
oci_execute(): ORA-06502: PL/SQL: numeric or value error: character string buffer too small
它也适用于 if 语句:
oci_bind_by_name($stmt, ':result', $result, 1000);
但是我的 PL/SQL 存储函数 return 大量数据所以我想使用最大长度为 -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: character string buffer too small
您需要指定一个长度,以便 OCI8 在调用数据库之前知道要分配多少内存。否则你依赖于 $result
在调用 oci_execute()
之前有一个值; $result
在 调用 oci_execute()
之前的长度将是允许返回的最大大小。我总是建议将大小传递给 oci_bind_by_name()
,这样就不会出现令人讨厌的意外截断。
我试图为 PL/SQL 存储函数绑定 $result
变量,但是
如果我将 $result
变量绑定为
oci_bind_by_name($stmt, ':result', $result, -1);
并给出错误消息:
oci_execute(): ORA-06502: PL/SQL: numeric or value error: character string buffer too small
它也适用于 if 语句:
oci_bind_by_name($stmt, ':result', $result, 1000);
但是我的 PL/SQL 存储函数 return 大量数据所以我想使用最大长度为 -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: character string buffer too small
您需要指定一个长度,以便 OCI8 在调用数据库之前知道要分配多少内存。否则你依赖于 $result
在调用 oci_execute()
之前有一个值; $result
在 调用 oci_execute()
之前的长度将是允许返回的最大大小。我总是建议将大小传递给 oci_bind_by_name()
,这样就不会出现令人讨厌的意外截断。