我正在尝试将php变量绑定到pl / sql数组。当我手动执行并设置绑定时,pl / sql过程正常工作,所以我知道这不是问题。导致问题的是oci_bind_array_by_name
。
我在下面的PHP代码中的行中收到以下错误消息:oci_bind_array_by_name
函数:
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;
答案 0 :(得分:0)
我觉得自己很傻,因为我没有仔细阅读API。显然我正在指定max_table_length,但错误消息是指我留下的max_item_length为-1 ...但是这是一个禁忌,因为我绑定了OUT参数而不是IN参数。
像这样更改了绑定,现在可以正常工作:
oci_bind_array_by_name($stmt,'USER_ID_ARRAY', $userIdArray, 250, 250, SQLT_VCS);