ID: 44113 Updated by: [EMAIL PROTECTED] Reported By: christopher dot jones at oracle dot com Status: Open Bug Type: OCI8 related Operating System: n/a PHP Version: 5.2.5 Assigned To: sixd New Comment:
Try this patch for 5.2.5: --- php-5.2.5/php-5.2.5/ext/oci8/oci8_collection.c 2007-07-31 12:21:08.000000000 -0700 +++ oci8_collection.c 2008-02-14 01:56:15.000000000 -0800 @@ -219,11 +219,17 @@ goto CLEANUP; } + /* free the describe handle */ + PHP_OCI_CALL(OCIHandleFree, ((dvoid *) dschp1, OCI_HTYPE_DESCRIBE)); PHP_OCI_REGISTER_RESOURCE(collection, le_collection); return collection; CLEANUP: + if (dschp1) { + PHP_OCI_CALL(OCIHandleFree, ((dvoid *) dschp1, OCI_HTYPE_DESCRIBE)); + } php_oci_error(connection->err, connection->errcode TSRMLS_CC); php_oci_collection_close(collection TSRMLS_CC); return NULL; Previous Comments: ------------------------------------------------------------------------ [2008-02-13 21:30:23] christopher dot jones at oracle dot com Description: ------------ In some circumstances oci_new_collection() can fail. The problem was reported to me as occurring from at least PHP 5.1.2 onwards. The cause appears to be lack of a describe-handle free in the OCI8 extension; this is under investigation. Reproduce code: --------------- create or replace type ut_num_list_t as table of number; create or replace procedure test_load( p_list_1 ut_num_list_t) as begin for i in 1..p_list_1.count() loop null; end loop; end; / show errors <?php $dbh = oci_pconnect('hr', 'hrpwd', '//localhost/XE'); for ($x = 0; $x < 100000; $x++) { //print "$x\n"; $list = array(); for ($i = 0; $i < mt_rand(0, 15); $i++) { $list[] = mt_rand(0, 30); } $sql = " begin test_load( p_list_1 => :list_1); end;"; $sth = oci_parse($dbh, $sql); $type = 'UT_NUM_LIST_T'; $placeholder = ':list_1'; if (!($var = oci_new_collection($dbh, $type))) { print "Failed new collection creation on $x\n"; } foreach ($list as $list_item) { $var->append($list_item); } oci_bind_by_name($sth, $placeholder, $var, -1, OCI_B_NTY); try { oci_execute($sth); $var->free(); oci_free_statement($sth); } catch (Exception $e) { print "Failed on $x\n"; throw $e; } } print "Completed $x\n"; oci_close($dbh); ?> Expected result: ---------------- Completed 100000 Actual result: -------------- Warning: oci_new_collection(): OCI-22303: type ""."UT_NUM_LIST_T" not found in /home/cjones/public_html/t1.php on line 26 Failed new collection creation on 65464 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=44113&edit=1