imp_res_field.phpt 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. --TEST--
  2. Oracle Database 12c Implicit Result Sets: field tests
  3. --SKIPIF--
  4. <?php
  5. if (!extension_loaded('oci8')) die ("skip no oci8 extension");
  6. $target_dbs = array('oracledb' => true, 'timesten' => false); // test runs on these DBs
  7. require(dirname(__FILE__).'/skipif.inc');
  8. preg_match('/.*Release ([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)*/', oci_server_version($c), $matches);
  9. if (!(isset($matches[0]) && $matches[1] >= 12)) {
  10. die("skip expected output only valid when using Oracle Database 12c or greater");
  11. }
  12. preg_match('/^[[:digit:]]+/', oci_client_version(), $matches);
  13. if (!(isset($matches[0]) && $matches[0] >= 12)) {
  14. die("skip works only with Oracle 12c or greater version of Oracle client libraries");
  15. }
  16. ?>
  17. --FILE--
  18. <?php
  19. require(dirname(__FILE__).'/connect.inc');
  20. // Initialization
  21. $stmtarray = array(
  22. "drop table imp_res_field_tab_1",
  23. "create table imp_res_field_tab_1 (c1_number number, c2_varchar210 varchar2(10))",
  24. "insert into imp_res_field_tab_1 values (1111, 'abcde')",
  25. "drop table imp_res_field_tab_2",
  26. "create table imp_res_field_tab_2 (c3_varchar21 varchar2(4))",
  27. "insert into imp_res_field_tab_2 values ('tttt')",
  28. "drop table imp_res_field_tab_3",
  29. "create table imp_res_field_tab_3 (c4_number52 number(5,2))",
  30. "insert into imp_res_field_tab_3 values (33)",
  31. "insert into imp_res_field_tab_3 values (NULL)",
  32. "create or replace procedure imp_res_field_proc as
  33. c1 sys_refcursor;
  34. begin
  35. open c1 for select * from imp_res_field_tab_1 order by 1;
  36. dbms_sql.return_result(c1);
  37. open c1 for select * from imp_res_field_tab_2 order by 1;
  38. dbms_sql.return_result(c1);
  39. open c1 for select * from imp_res_field_tab_3 order by 1;
  40. dbms_sql.return_result(c1);
  41. end;"
  42. );
  43. oci8_test_sql_execute($c, $stmtarray);
  44. function print_fields($s)
  45. {
  46. echo "num fields : " . oci_num_fields($s) . "\n";
  47. for ($i = 1; $i <= oci_num_fields($s); $i++) {
  48. $is_null = oci_field_is_null($s, $i) ? "T" : "F";
  49. $name = oci_field_name($s, $i);
  50. $precision = oci_field_precision($s, $i);
  51. $scale = oci_field_scale($s, $i);
  52. $size = oci_field_size($s, $i);
  53. $typeraw = oci_field_type_raw($s, $i);
  54. $type = oci_field_type($s, $i);
  55. echo "$name\t: is_null $is_null, precision $precision, scale $scale, size $size, typeraw $typeraw, type $type\n";
  56. }
  57. }
  58. // Run Test
  59. echo "Test 1 - can't get IRS fields from parent\n";
  60. $s = oci_parse($c, "begin imp_res_field_proc(); end;");
  61. oci_execute($s);
  62. print_fields($s);
  63. echo "\nTest 2 - can't get IRS fields from parent when fetching\n";
  64. $s = oci_parse($c, "begin imp_res_field_proc(); end;");
  65. oci_execute($s);
  66. while (($r = oci_fetch_row($s))) {
  67. var_dump($r);
  68. print_fields($s);
  69. }
  70. echo "\nTest 3 - get IRS fields\n";
  71. $s = oci_parse($c, "begin imp_res_field_proc(); end;");
  72. oci_execute($s);
  73. while (($s1 = oci_get_implicit_resultset($s))) {
  74. print_fields($s1);
  75. }
  76. echo "\nTest 4 - get IRS fields before fetching rows\n";
  77. $s = oci_parse($c, "begin imp_res_field_proc(); end;");
  78. oci_execute($s);
  79. $i = 0;
  80. while (($s1 = oci_get_implicit_resultset($s))) {
  81. echo "===> Result set ".++$i."\n";
  82. print_fields($s1);
  83. while (($r = oci_fetch_row($s1)) !== false) {
  84. var_dump($r);
  85. }
  86. }
  87. echo "\nTest 5 - get IRS fields when fetching rows\n";
  88. $s = oci_parse($c, "begin imp_res_field_proc(); end;");
  89. oci_execute($s);
  90. $i = 0;
  91. while (($s1 = oci_get_implicit_resultset($s))) {
  92. echo "===> Result set ".++$i."\n";
  93. while (($r = oci_fetch_row($s1)) !== false) {
  94. var_dump($r);
  95. print_fields($s1);
  96. }
  97. }
  98. // Clean up
  99. $stmtarray = array(
  100. "drop procedure imp_res_field_proc",
  101. "drop table imp_res_field_tab_1",
  102. "drop table imp_res_field_tab_2",
  103. "drop table imp_res_field_tab_3"
  104. );
  105. oci8_test_sql_execute($c, $stmtarray);
  106. ?>
  107. ===DONE===
  108. <?php exit(0); ?>
  109. --EXPECTF--
  110. Test 1 - can't get IRS fields from parent
  111. num fields : 0
  112. Test 2 - can't get IRS fields from parent when fetching
  113. array(2) {
  114. [0]=>
  115. string(4) "1111"
  116. [1]=>
  117. string(5) "abcde"
  118. }
  119. num fields : 0
  120. array(1) {
  121. [0]=>
  122. string(4) "tttt"
  123. }
  124. num fields : 0
  125. array(1) {
  126. [0]=>
  127. string(2) "33"
  128. }
  129. num fields : 0
  130. array(1) {
  131. [0]=>
  132. NULL
  133. }
  134. num fields : 0
  135. Test 3 - get IRS fields
  136. num fields : 2
  137. C1_NUMBER : is_null F, precision 0, scale -127, size 22, typeraw 2, type NUMBER
  138. C2_VARCHAR210 : is_null F, precision 0, scale 0, size 10, typeraw 1, type VARCHAR2
  139. num fields : 1
  140. C3_VARCHAR21 : is_null F, precision 0, scale 0, size 4, typeraw 1, type VARCHAR2
  141. num fields : 1
  142. C4_NUMBER52 : is_null F, precision 5, scale 2, size 22, typeraw 2, type NUMBER
  143. Test 4 - get IRS fields before fetching rows
  144. ===> Result set 1
  145. num fields : 2
  146. C1_NUMBER : is_null F, precision 0, scale -127, size 22, typeraw 2, type NUMBER
  147. C2_VARCHAR210 : is_null F, precision 0, scale 0, size 10, typeraw 1, type VARCHAR2
  148. array(2) {
  149. [0]=>
  150. string(4) "1111"
  151. [1]=>
  152. string(5) "abcde"
  153. }
  154. ===> Result set 2
  155. num fields : 1
  156. C3_VARCHAR21 : is_null F, precision 0, scale 0, size 4, typeraw 1, type VARCHAR2
  157. array(1) {
  158. [0]=>
  159. string(4) "tttt"
  160. }
  161. ===> Result set 3
  162. num fields : 1
  163. C4_NUMBER52 : is_null F, precision 5, scale 2, size 22, typeraw 2, type NUMBER
  164. array(1) {
  165. [0]=>
  166. string(2) "33"
  167. }
  168. array(1) {
  169. [0]=>
  170. NULL
  171. }
  172. Test 5 - get IRS fields when fetching rows
  173. ===> Result set 1
  174. array(2) {
  175. [0]=>
  176. string(4) "1111"
  177. [1]=>
  178. string(5) "abcde"
  179. }
  180. num fields : 2
  181. C1_NUMBER : is_null F, precision 0, scale -127, size 22, typeraw 2, type NUMBER
  182. C2_VARCHAR210 : is_null F, precision 0, scale 0, size 10, typeraw 1, type VARCHAR2
  183. ===> Result set 2
  184. array(1) {
  185. [0]=>
  186. string(4) "tttt"
  187. }
  188. num fields : 1
  189. C3_VARCHAR21 : is_null F, precision 0, scale 0, size 4, typeraw 1, type VARCHAR2
  190. ===> Result set 3
  191. array(1) {
  192. [0]=>
  193. string(2) "33"
  194. }
  195. num fields : 1
  196. C4_NUMBER52 : is_null F, precision 5, scale 2, size 22, typeraw 2, type NUMBER
  197. array(1) {
  198. [0]=>
  199. NULL
  200. }
  201. num fields : 1
  202. C4_NUMBER52 : is_null T, precision 5, scale 2, size 22, typeraw 2, type NUMBER
  203. ===DONE===