--TEST--
fetching cursor from a statement
--SKIPIF--
<?php
$target_dbs 
= array('oracledb' => true'timesten' => false);  // test runs on these DBs
require(dirname(__FILE__).'/skipif.inc');
?> 
--FILE--
<?php

require dirname(__FILE__)."/connect.inc";
require 
dirname(__FILE__)."/create_table.inc";

$insert_sql "INSERT INTO ".$schema.$table_name." (id, value) VALUES (1,1)";

if (!(
$s oci_parse($c$insert_sql))) {
    die(
"oci_parse(insert) failed!\n");
}

for (
$i 0$i<3$i++) {
    if (!
oci_execute($s)) {
        die(
"oci_execute(insert) failed!\n");
    }
}

if (!
oci_commit($c)) {
    die(
"oci_commit() failed!\n");
}

$sql "select CURSOR(select * from ".$schema.$table_name.") as curs FROM dual";
$stmt oci_parse($c$sql);

oci_execute($stmt);

while (
$data oci_fetch_assoc($stmt)) {
    
oci_execute($data["CURS"]);
    
$subdata oci_fetch_assoc($data["CURS"]);
    
var_dump($subdata);
    
var_dump(oci_cancel($data["CURS"]));
    
$subdata oci_fetch_assoc($data["CURS"]);
    
var_dump($subdata);
    
var_dump(oci_cancel($data["CURS"]));
}

require 
dirname(__FILE__)."/drop_table.inc";

echo 
"Done\n";

?>
--EXPECTF--
array(5) {
  ["ID"]=>
  string(1) "1"
  ["VALUE"]=>
  string(1) "1"
  ["BLOB"]=>
  NULL
  ["CLOB"]=>
  NULL
  ["STRING"]=>
  NULL
}
bool(true)

Warning: oci_fetch_assoc(): ORA-01002: fetch out of sequence in %s on line %d
bool(false)
bool(true)
Done