1--TEST-- 2fetching cursor from a statement 3--SKIPIF-- 4<?php 5$target_dbs = array('oracledb' => true, 'timesten' => false); // test runs on these DBs 6require(__DIR__.'/skipif.inc'); 7?> 8--FILE-- 9<?php 10 11require __DIR__."/connect.inc"; 12require __DIR__."/create_table.inc"; 13 14$insert_sql = "INSERT INTO ".$schema.$table_name." (id, value) VALUES (1,1)"; 15 16if (!($s = oci_parse($c, $insert_sql))) { 17 die("oci_parse(insert) failed!\n"); 18} 19 20for ($i = 0; $i<3; $i++) { 21 if (!oci_execute($s)) { 22 die("oci_execute(insert) failed!\n"); 23 } 24} 25 26if (!oci_commit($c)) { 27 die("oci_commit() failed!\n"); 28} 29 30$sql = "select CURSOR(select * from ".$schema.$table_name.") as curs FROM dual"; 31$stmt = oci_parse($c, $sql); 32 33oci_execute($stmt); 34 35while ($data = oci_fetch_assoc($stmt)) { 36 oci_execute($data["CURS"]); 37 $subdata = oci_fetch_assoc($data["CURS"]); 38 var_dump($subdata); 39 var_dump(oci_cancel($data["CURS"])); 40 $subdata = oci_fetch_assoc($data["CURS"]); 41 var_dump($subdata); 42 var_dump(oci_cancel($data["CURS"])); 43} 44 45require __DIR__."/drop_table.inc"; 46 47echo "Done\n"; 48 49?> 50--EXPECTF-- 51array(5) { 52 ["ID"]=> 53 string(1) "1" 54 ["VALUE"]=> 55 string(1) "1" 56 ["BLOB"]=> 57 NULL 58 ["CLOB"]=> 59 NULL 60 ["STRING"]=> 61 NULL 62} 63bool(true) 64 65Warning: oci_fetch_assoc(): ORA-01002: fetch out of sequence in %s on line %d 66bool(false) 67bool(true) 68Done 69