Annotation of embedaddon/php/ext/oci8/tests/refcur_prefetch_4.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: Prefetch with REF cursor. Test No 4
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:
21: "CREATE TABLE refcurtest (c1 NUMBER, c2 VARCHAR(20))",
22:
23: "CREATE or REPLACE PACKAGE refcurpkg is
24: type refcursortype is ref cursor;
25: procedure open_ref_cur(cur1 out refcursortype);
26: procedure fetch_ref_cur(cur1 in refcursortype, c1 out number, c2 out varchar2);
27: end refcurpkg;",
28:
29: "CREATE or REPLACE PACKAGE body refcurpkg is
30: procedure open_ref_cur(cur1 out refcursortype) is
31: begin
32: open cur1 for select * from refcurtest order by c1;
33: end open_ref_cur;
34: procedure fetch_ref_cur(cur1 in refcursortype, c1 out number, c2 out varchar2) is
35: begin
36: fetch cur1 into c1,c2;
37: end fetch_ref_cur;
38: end refcurpkg;"
39: );
40:
41: oci8_test_sql_execute($c, $stmtarray);
42:
43: // Insert 500 rows into the table.
44: $insert_sql = "INSERT INTO refcurtest (c1, c2) VALUES (:c1,:c2)";
45: if (!($s = oci_parse($c, $insert_sql))) {
46: die("oci_parse(insert) failed!\n");
47: }
48:
49: for ($i = 0; $i <= 500; $i++) {
50: $val2 = 'test'.$i;
51: oci_bind_by_name($s,':c1',$i);
52: oci_bind_by_name($s,':c2',$val2);
53: if (!oci_execute($s)) {
54: die("oci_execute(insert) failed!\n");
55: }
56: }
57:
58: // Steps to Fetch from PHP . For every sub-test,the cursor is bound and then executed.
59:
60: $sql1 = "begin refcurpkg.open_ref_cur(:cur1); end;";
61: $s1 = oci_parse($c,$sql1);
62: $cur1 = oci_new_cursor($c);
63: if (!oci_bind_by_name($s1,":cur1",$cur1,-1,SQLT_RSET)) {
64: die("oci_bind_by_name(sql1) failed!\n");
65: }
66:
67:
68: // Steps to Fetch from PL/SQL . For every sub-test,the cursor is bound and then executed.
69:
70: $sql2 = "begin refcurpkg.fetch_ref_cur(:curs1,:c1,:c2); end;";
71: $s2 = oci_parse($c,$sql2);
72: if (!oci_bind_by_name($s2, ":curs1", $cur1, -1, SQLT_RSET)) {
73: die("oci_bind_by_name(sql2) failed!\n");
74: }
75: if (!oci_bind_by_name($s2, ":c1", $c1, -1, SQLT_INT)) {
76: die("oci_bind_by_name(sql2) failed!\n");
77: }
78: if (!oci_bind_by_name($s2, ":c2", $c2, 20, SQLT_CHR)) {
79: die("oci_bind_by_name(sql2) failed!\n");
80: }
81:
82:
83: echo "------Test 1 - Set Prefetch after PL/SQL fetch ----------\n";
84: $cur1 = oci_new_cursor($c);
85: // Fetch from PL/SQL
86: if (!oci_bind_by_name($s2,":curs1",$cur1,-1,SQLT_RSET)) {
87: die("oci_bind_by_name(sql2) failed!\n");
88: }
89: oci_execute($s2);
90: echo "Fetch Row from PL/SQL\n";
91: var_dump($c1);
92: var_dump($c2);
93:
94: // Fetch from PHP
95: echo "Fetch Row from PHP\n";
96: if (!oci_bind_by_name($s1,":cur1",$cur1,-1,SQLT_RSET)) {
97: die("oci_bind_by_name(sql1) failed!\n");
98: }
99: oci_set_prefetch($cur1,5);
100: oci_execute($s1);
101: oci_execute($cur1);
102: var_dump(oci_fetch_row($cur1));
103:
104: echo "------Test 2- Overwrite prefetch-----------\n";
105: // Fetch from PHP
106: $cur1 = oci_new_cursor($c);
107: if (!oci_bind_by_name($s1,":cur1",$cur1,-1,SQLT_RSET)) {
108: die("oci_bind_by_name(sql1) failed!\n");
109: }
110: echo "Fetch Row from PHP\n";
111: oci_execute($s1);
112: oci_execute($cur1);
113: var_dump(oci_fetch_row($cur1));
114: oci_set_prefetch($cur1,5);
115: oci_set_prefetch($cur1,0);
116: oci_set_prefetch($cur1,100);
117:
118: // Fetch from PL/SQL
119: if (!oci_bind_by_name($s2,":curs1",$cur1,-1,SQLT_RSET)) {
120: die("oci_bind_by_name(sql2) failed!\n");
121: }
122: oci_execute($s2);
123: echo "Fetch Row from PL/SQL\n";
124: var_dump($c1);
125: var_dump($c2);
126:
127:
128: function print_roundtrips($c) {
129: $sql_stmt = "select value from v\$mystat a,v\$statname c where
130: a.statistic#=c.statistic# and c.name='SQL*Net roundtrips to/from client'";
131: $s = oci_parse($c,$sql_stmt);
132: oci_define_by_name($s,"VALUE",$value);
133: oci_execute($s);
134: oci_fetch($s);
135: return $value;
136: }
137:
138: // Clean up here
139:
140: $stmtarray = array(
141: "drop package refcurpkg",
142: "drop table refcurtest"
143: );
144:
145: oci8_test_sql_execute($c, $stmtarray);
146:
147: echo "Done\n";
148: ?>
149: --EXPECTF--
150: ------Test 1 - Set Prefetch after PL/SQL fetch ----------
151:
152: Warning: oci_execute(): ORA-01001: %s
153: ORA-06512: at "SYSTEM.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: Fetch Row from PHP
159: array(2) {
160: [0]=>
161: string(1) "0"
162: [1]=>
163: string(5) "test0"
164: }
165: ------Test 2- Overwrite prefetch-----------
166: Fetch Row from PHP
167: array(2) {
168: [0]=>
169: string(1) "0"
170: [1]=>
171: string(5) "test0"
172: }
173: Fetch Row from PL/SQL
174: int(101)
175: string(%d) "test101"
176: Done
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>