0

我正在尝试将 php 变量绑定到 pl/sql 数组。当我手动执行它并设置绑定时,pl/sql 过程工作正常,所以我知道这不是问题。这oci_bind_array_by_name就是导致问题的原因。

我在下面调用oci_bind_array_by_name函数的 PHP 代码中收到以下错误消息:

Warning: oci_bind_array_by_name() [function.oci-bind-array-by-name]: You must provide max length value for empty arrays

我很困惑,因为我实际上根据文档在函数调用中提供了最大长度(250):

http://php.net/manual/en/function.oci-bind-array-by-name.php 我使用的是 PHP 5.1.6

这是相关的PHP代码:

$SQL = "BEGIN MYPKG.PROCESS_USERS(:USER_ID_ARRAY); END;";

$conn = self::getConnection();
$stmt = OCIParse($conn, $SQL);
$userIdArray= array(); /*I've also tried not initializing the OUT array (same error)
If I put some dummy value into the $userIdArray the procedure will run fine, but the results afterward will contain only that dummy value and not the output of the procedure*/
oci_bind_array_by_name($stmt,'USER_ID_ARRAY', $userIdArray, 250, -1, SQLT_VCS);

我在包中定义了一个数组类型:

TYPE USER_ID_ARRAY IS TABLE OF VARCHAR2(250) INDEX BY BINARY_INTEGER;

The PROCESS_USERS function in an abbreviated form:
PROCEDURE PROCESS_USERS(p_userIdArray out USER_ID_ARRAY) AS
  --Code here which processes all waiting users and returns their IDs in p_userIdArray
END PROCESS USERS;
4

1 回答 1

0

我觉得自己像个傻瓜,因为我没有仔细阅读 API。显然我指定了 max_table_length 但错误消息指的是我留下为 -1 的 max_item_length ......但这是一个禁忌,因为我绑定的是 OUT 参数而不是 IN 参数。

像这样改变了绑定,它现在可以工作了:

oci_bind_array_by_name($stmt,'USER_ID_ARRAY', $userIdArray, 250, 250, SQLT_VCS);
于 2010-06-02T18:47:53.253 回答