Annotation of embedaddon/php/ext/oci8/tests/refcur_prefetch_1.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: Prefetch with REF cursor. Test different values for prefetch with oci_set_prefetch().
! 3: --SKIPIF--
! 4: <?php if (!extension_loaded('oci8')) die("skip no oci8 extension");
! 5: if (!extension_loaded('oci8')) die("skip no oci8 extension");
! 6: require(dirname(__FILE__)."/connect.inc");
! 7: if (preg_match('/Release 1[012]\./', oci_server_version($c), $matches) !== 1) {
! 8: die("skip expected output only valid when using Oracle 10g or greater databases");
! 9: } else if (preg_match('/^(11\.2|12)\./', oci_client_version()) != 1) {
! 10: die("skip test expected to work only with Oracle 11gR2 or greater version of client");
! 11: }
! 12: ?>
! 13: --FILE--
! 14: <?php
! 15: require(dirname(__FILE__)."/connect.inc");
! 16:
! 17: // Creates the necessary package and tables.
! 18: $stmtarray = array(
! 19: "DROP TABLE refcurtest",
! 20: "CREATE TABLE refcurtest (c1 NUMBER, c2 VARCHAR(20))",
! 21: "CREATE or REPLACE PACKAGE refcurpkg is
! 22: type refcursortype is ref cursor;
! 23: procedure open_ref_cur(cur1 out refcursortype);
! 24: procedure fetch_ref_cur(cur1 in refcursortype, c1 out number,c2 out varchar2);
! 25: end refcurpkg;",
! 26: "CREATE or REPLACE PACKAGE body refcurpkg is
! 27: procedure open_ref_cur(cur1 out refcursortype) is
! 28: begin
! 29: open cur1 for select * from refcurtest order by c1;
! 30: end open_ref_cur;
! 31: procedure fetch_ref_cur(cur1 in refcursortype, c1 out number,
! 32: c2 out varchar2) is
! 33: begin
! 34: fetch cur1 into c1,c2;
! 35: end fetch_ref_cur;
! 36: end refcurpkg;"
! 37: );
! 38:
! 39: oci8_test_sql_execute($c, $stmtarray);
! 40:
! 41: // Insert 500 rows into the table.
! 42: $insert_sql = "INSERT INTO refcurtest (c1, c2) VALUES (:c1,:c2)";
! 43: if (!($s = oci_parse($c, $insert_sql))) {
! 44: die("oci_parse(insert) failed!\n");
! 45: }
! 46:
! 47: for ($i = 0; $i<=500; $i++) {
! 48: $val2 = 'test'.$i;
! 49: oci_bind_by_name($s,':c1',$i);
! 50: oci_bind_by_name($s,':c2',$val2);
! 51: if (!oci_execute($s)) {
! 52: die("oci_execute(insert) failed!\n");
! 53: }
! 54: }
! 55:
! 56: // Various values for prefetch
! 57: $pref = array(0,1,501,499,250,12345,-12345,-1);
! 58: foreach($pref as $value) {
! 59: echo"-----------------------------------------------\n";
! 60: echo "Test with Prefetch value set to $value \n";
! 61: echo"-----------------------------------------------\n";
! 62: $cur1 = oci_new_cursor($c);
! 63: fetch_frm_php($c,$cur1,$value);
! 64: fetch_frm_plsql($c,$cur1);
! 65: }
! 66:
! 67:
! 68: // This function sets the prefetch count to the given $value and fetches one row .
! 69:
! 70: function fetch_frm_php($c,$cur1,$value) {
! 71: $sql1 = "begin refcurpkg.open_ref_cur(:cur1); end;";
! 72: $s1 = oci_parse($c,$sql1);
! 73: if (!oci_bind_by_name($s1,":cur1",$cur1,-1,SQLT_RSET)) {
! 74: die("oci_bind_by_name(sql1) failed!\n");
! 75: }
! 76: oci_execute($s1);
! 77: oci_set_prefetch($cur1,$value);
! 78: oci_execute($cur1);
! 79: echo "Fetch Row from PHP\n";
! 80: var_dump(oci_fetch_row($cur1));
! 81: }
! 82:
! 83: // This function calls the fetch_ref_cur procedure to get the values from the REF cur.
! 84:
! 85: function fetch_frm_plsql($c,$cur1) {
! 86: $sql2 = "begin refcurpkg.fetch_ref_cur(:curs1,:c1,:c2); end;";
! 87: $s2 = oci_parse($c,$sql2);
! 88: if (!oci_bind_by_name($s2,":curs1",$cur1,-1,SQLT_RSET)) {
! 89: die("oci_bind_by_name(sql2) failed!\n");
! 90: }
! 91: if (!oci_bind_by_name($s2,":c1",$c1,-1,SQLT_INT)) {
! 92: die("oci_bind_by_name(sql2) failed!\n");
! 93: }
! 94: if (!oci_bind_by_name($s2,":c2",$c2,20,SQLT_CHR)) {
! 95: die("oci_bind_by_name(sql2) failed!\n");
! 96: }
! 97: oci_execute($s2);
! 98: echo "Fetch Row from PL/SQL\n";
! 99: var_dump($c1);
! 100: var_dump($c2);
! 101: }
! 102:
! 103: // Clean up here
! 104:
! 105: $stmtarray = array(
! 106: "drop package refcurpkg",
! 107: "drop table refcurtest"
! 108: );
! 109:
! 110: oci8_test_sql_execute($c, $stmtarray);
! 111:
! 112: echo "Done\n";
! 113: ?>
! 114: --EXPECTF--
! 115: -----------------------------------------------
! 116: Test with Prefetch value set to 0
! 117: -----------------------------------------------
! 118: Fetch Row from PHP
! 119: array(2) {
! 120: [0]=>
! 121: string(%d) "0"
! 122: [1]=>
! 123: string(%d) "test0"
! 124: }
! 125: Fetch Row from PL/SQL
! 126: int(1)
! 127: string(%d) "test1"
! 128: -----------------------------------------------
! 129: Test with Prefetch value set to 1
! 130: -----------------------------------------------
! 131: Fetch Row from PHP
! 132: array(2) {
! 133: [0]=>
! 134: string(%d) "0"
! 135: [1]=>
! 136: string(%d) "test0"
! 137: }
! 138: Fetch Row from PL/SQL
! 139: int(2)
! 140: string(%d) "test2"
! 141: -----------------------------------------------
! 142: Test with Prefetch value set to 501
! 143: -----------------------------------------------
! 144: Fetch Row from PHP
! 145: array(2) {
! 146: [0]=>
! 147: string(%d) "0"
! 148: [1]=>
! 149: string(%d) "test0"
! 150: }
! 151:
! 152: Warning: oci_execute(): ORA-01002: %s
! 153: ORA-06512: at "%s.REFCURPKG", line %d
! 154: ORA-06512: at line %d in %s on line %d
! 155: Fetch Row from PL/SQL
! 156: int(0)
! 157: NULL
! 158: -----------------------------------------------
! 159: Test with Prefetch value set to 499
! 160: -----------------------------------------------
! 161: Fetch Row from PHP
! 162: array(2) {
! 163: [0]=>
! 164: string(%d) "0"
! 165: [1]=>
! 166: string(%d) "test0"
! 167: }
! 168: Fetch Row from PL/SQL
! 169: int(500)
! 170: string(%d) "test500"
! 171: -----------------------------------------------
! 172: Test with Prefetch value set to 250
! 173: -----------------------------------------------
! 174: Fetch Row from PHP
! 175: array(2) {
! 176: [0]=>
! 177: string(%d) "0"
! 178: [1]=>
! 179: string(%d) "test0"
! 180: }
! 181: Fetch Row from PL/SQL
! 182: int(251)
! 183: string(%d) "test251"
! 184: -----------------------------------------------
! 185: Test with Prefetch value set to 12345
! 186: -----------------------------------------------
! 187: Fetch Row from PHP
! 188: array(2) {
! 189: [0]=>
! 190: string(%d) "0"
! 191: [1]=>
! 192: string(%d) "test0"
! 193: }
! 194:
! 195: Warning: oci_execute(): ORA-01002: %s
! 196: ORA-06512: at "%s.REFCURPKG", line %d
! 197: ORA-06512: at line %d in %s on line %d
! 198: Fetch Row from PL/SQL
! 199: int(0)
! 200: NULL
! 201: -----------------------------------------------
! 202: Test with Prefetch value set to -12345
! 203: -----------------------------------------------
! 204:
! 205: Warning: oci_set_prefetch(): Number of rows to be prefetched has to be greater than or equal to 0 in %s on line %d
! 206: Fetch Row from PHP
! 207: array(2) {
! 208: [0]=>
! 209: string(%d) "0"
! 210: [1]=>
! 211: string(%d) "test0"
! 212: }
! 213: Fetch Row from PL/SQL
! 214: int(101)
! 215: string(%d) "test101"
! 216: -----------------------------------------------
! 217: Test with Prefetch value set to -1
! 218: -----------------------------------------------
! 219:
! 220: Warning: oci_set_prefetch(): Number of rows to be prefetched has to be greater than or equal to 0 in %s on line %d
! 221: Fetch Row from PHP
! 222: array(2) {
! 223: [0]=>
! 224: string(%d) "0"
! 225: [1]=>
! 226: string(%d) "test0"
! 227: }
! 228: Fetch Row from PL/SQL
! 229: int(101)
! 230: string(%d) "test101"
! 231: Done
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>