Annotation of embedaddon/php/ext/oci8/tests/refcur_prefetch_2.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: Prefetch with REF cursor. Test No 2
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: // Steps to Fetch from PHP . For every sub-test,the cursor is bound and then executed.
57:
58: $sql1 = "begin refcurpkg.open_ref_cur(:cur1); end;";
59: $s1 = oci_parse($c,$sql1);
60: $cur1 = oci_new_cursor($c);
61: if (!oci_bind_by_name($s1,":cur1",$cur1,-1,SQLT_RSET)) {
62: die("oci_bind_by_name(sql1) failed!\n");
63: }
64:
65:
66: // Steps to Fetch from PL/SQL . For every sub-test,the cursor is bound and then executed.
67:
68: $sql2 = "begin refcurpkg.fetch_ref_cur(:curs1,:c1,:c2); end;";
69: $s2 = oci_parse($c,$sql2);
70: if (!oci_bind_by_name($s2, ":curs1", $cur1, -1, SQLT_RSET)) {
71: die("oci_bind_by_name(sql2) failed!\n");
72: }
73: if (!oci_bind_by_name($s2, ":c1", $c1, -1, SQLT_INT)) {
74: die("oci_bind_by_name(sql2) failed!\n");
75: }
76: if (!oci_bind_by_name($s2, ":c2", $c2, 20, SQLT_CHR)) {
77: die("oci_bind_by_name(sql2) failed!\n");
78: }
79:
80:
81: echo "------Test 1- Check Roundtrips with prefetch 0 and 5 -----------\n";
82: oci_execute($s1);
83: oci_execute($cur1);
84: $initial_rt = print_roundtrips($c);
85: oci_set_prefetch($cur1,0);
86: for ($i = 0;$i<5;$i++) {
87: var_dump(oci_fetch_row($cur1));
88: }
89:
90: $cnt = (print_roundtrips($c) - $initial_rt);
91: echo "Number of roundtrips made with prefetch count 0 for 5 rows is $cnt\n";
92:
93: $initial_rt = print_roundtrips($c);
94: oci_set_prefetch($cur1,5);
95: for ($i = 0;$i<5;$i++) {
96: var_dump(oci_fetch_row($cur1));
97: }
98:
99: $cnt = (print_roundtrips($c) - $initial_rt );
100: echo "Number of roundtrips made with prefetch count 5 for 5 rows is $cnt\n";
101:
102: echo "------Test 2 - Set Prefetch before PL/SQL fetch ----------\n";
103: // Fetch from PHP
104: $cur1 = oci_new_cursor($c);
105: if (!oci_bind_by_name($s1,":cur1",$cur1,-1,SQLT_RSET)) {
106: die("oci_bind_by_name(sql1) failed!\n");
107: }
108:
109: echo "Fetch Row from PHP\n";
110: oci_execute($s1);
111: oci_execute($cur1);
112: var_dump(oci_fetch_row($cur1));
113: oci_set_prefetch($cur1,5);
114:
115: // Fetch from PL/SQL
116: if (!oci_bind_by_name($s2,":curs1",$cur1,-1,SQLT_RSET)) {
117: die("oci_bind_by_name(sql2) failed!\n");
118: }
119: oci_execute($s2);
120: echo "Fetch Row from PL/SQL\n";
121: var_dump($c1);
122: var_dump($c2);
123:
124: function print_roundtrips($c) {
125: $sql_stmt = "select value from v\$mystat a,v\$statname c where
126: a.statistic#=c.statistic# and c.name='SQL*Net roundtrips to/from client'";
127: $s = oci_parse($c,$sql_stmt);
128: oci_define_by_name($s,"VALUE",$value);
129: oci_execute($s);
130: oci_fetch($s);
131: return $value;
132: }
133:
134: // Clean up here
135:
136: $stmtarray = array(
137: "drop package refcurpkg",
138: "drop table refcurtest"
139: );
140:
141: oci8_test_sql_execute($c, $stmtarray);
142:
143: echo "Done\n";
144: ?>
145: --EXPECTF--
146: ------Test 1- Check Roundtrips with prefetch 0 and 5 -----------
147: array(2) {
148: [0]=>
149: string(1) "0"
150: [1]=>
151: string(5) "test0"
152: }
153: array(2) {
154: [0]=>
155: string(1) "1"
156: [1]=>
157: string(5) "test1"
158: }
159: array(2) {
160: [0]=>
161: string(1) "2"
162: [1]=>
163: string(5) "test2"
164: }
165: array(2) {
166: [0]=>
167: string(1) "3"
168: [1]=>
169: string(5) "test3"
170: }
171: array(2) {
172: [0]=>
173: string(1) "4"
174: [1]=>
175: string(5) "test4"
176: }
177: Number of roundtrips made with prefetch count 0 for 5 rows is 6
178: array(2) {
179: [0]=>
180: string(1) "5"
181: [1]=>
182: string(5) "test5"
183: }
184: array(2) {
185: [0]=>
186: string(1) "6"
187: [1]=>
188: string(5) "test6"
189: }
190: array(2) {
191: [0]=>
192: string(1) "7"
193: [1]=>
194: string(5) "test7"
195: }
196: array(2) {
197: [0]=>
198: string(1) "8"
199: [1]=>
200: string(5) "test8"
201: }
202: array(2) {
203: [0]=>
204: string(1) "9"
205: [1]=>
206: string(5) "test9"
207: }
208: Number of roundtrips made with prefetch count 5 for 5 rows is 2
209: ------Test 2 - Set Prefetch before PL/SQL fetch ----------
210: Fetch Row from PHP
211: array(2) {
212: [0]=>
213: string(1) "0"
214: [1]=>
215: string(5) "test0"
216: }
217: Fetch Row from PL/SQL
218: int(101)
219: string(%d) "test101"
220: Done
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>