bind_char_4.phpt 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. --TEST--
  2. PL/SQL oci_bind_by_name with SQLT_AFC aka CHAR to VARCHAR2 parameter
  3. --EXTENSIONS--
  4. oci8
  5. --SKIPIF--
  6. <?php
  7. require(__DIR__."/connect.inc");
  8. // The bind buffer size edge cases seem to change each DB version.
  9. preg_match('/.*Release ([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)*/', oci_server_version($c), $matches);
  10. if (!(isset($matches[0]) && $matches[1] >= 12)) {
  11. die("skip expected output only valid when using Oracle 12c database");
  12. }
  13. ?>
  14. --ENV--
  15. NLS_LANG=.AL32UTF8
  16. --FILE--
  17. <?php
  18. // Same test as bind_char_3 but the PL/SQL function uses VARCHAR2 instead of CHAR
  19. require(__DIR__.'/connect.inc');
  20. // Initialization
  21. $stmtarray = array(
  22. "create or replace function bind_char_3_fn(p1 varchar2) return varchar2 as begin return p1; end;",
  23. );
  24. oci8_test_sql_execute($c, $stmtarray);
  25. // Run Test
  26. echo "Test 1.1 In Length: default. In Type: default. Out Length: default. Out Type: default\n";
  27. $s = oci_parse($c, "begin :bv2 := bind_char_3_fn(:bv1); end;");
  28. $bv1 = 'abc';
  29. $r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2);
  30. if ($r)
  31. do_e($s);
  32. var_dump($bv1, $bv2);
  33. echo "Test 1.2 In Length: default. In Type: default. Out Length: 10. Out Type: default\n";
  34. $bv1 = 'abc';
  35. $r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2, 10);
  36. if ($r)
  37. do_e($s);
  38. var_dump($bv1, $bv2);
  39. echo "Test 1.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default\n";
  40. $bv1 = 'abc';
  41. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10);
  42. if ($r)
  43. do_e($s);
  44. var_dump($bv1, $bv2);
  45. echo "Test 1.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
  46. $bv1 = 'abc';
  47. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
  48. if ($r)
  49. do_e($s);
  50. var_dump($bv1, $bv2);
  51. echo "Test 1.5 In Length: strlen. In Type: AFC. Out Length: strlen(input). Out Type: AFC\n";
  52. $bv1 = 'abc';
  53. $r = oci_bind_by_name($s, ':bv1', $bv1, strlen($bv1), SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, strlen($bv1), SQLT_AFC);
  54. if ($r)
  55. do_e($s);
  56. var_dump($bv1, $bv2);
  57. echo "Test 1.6 In Length: strlen. In Type: AFC. Out Length: strlen(input)-1. Out Type: AFC\n";
  58. $bv1 = 'abc';
  59. $r = oci_bind_by_name($s, ':bv1', $bv1, strlen($bv1), SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, strlen($bv1)-1, SQLT_AFC);
  60. if ($r)
  61. do_e($s);
  62. var_dump($bv1, $bv2);
  63. echo "Test 1.7 In Length: strlen. In Type: AFC. Out Length: strlen(input)+1. Out Type: AFC\n";
  64. $bv1 = 'abc';
  65. $r = oci_bind_by_name($s, ':bv1', $bv1, strlen($bv1), SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, strlen($bv1)+1, SQLT_AFC);
  66. if ($r)
  67. do_e($s);
  68. var_dump($bv1, $bv2);
  69. echo "\n\nTests with ''\n\n";
  70. echo "Test 2.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
  71. $bv1 = '';
  72. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
  73. if ($r)
  74. do_e($s);
  75. var_dump($bv1, $bv2);
  76. echo "Test 2.2 In Length: default. In Type: default. Out Length: 10. Out Type: default\n";
  77. $r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2, 10);
  78. if ($r)
  79. do_e($s);
  80. var_dump($bv1, $bv2);
  81. echo "Test 2.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default\n";
  82. $bv1 = '';
  83. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10);
  84. if ($r)
  85. do_e($s);
  86. var_dump($bv1, $bv2);
  87. echo "Test 2.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
  88. $bv1 = '';
  89. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
  90. if ($r)
  91. do_e($s);
  92. var_dump($bv1, $bv2);
  93. echo "Test 2.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC\n";
  94. $bv1 = '';
  95. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 0, SQLT_AFC);
  96. if ($r)
  97. do_e($s);
  98. var_dump($bv1, $bv2);
  99. echo "Test 2.6 In Length: 0. In Type: AFC. Out Length: 0. Out Type: AFC\n";
  100. $bv1 = '';
  101. $r = oci_bind_by_name($s, ':bv1', $bv1, 0, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 0, SQLT_AFC);
  102. if ($r)
  103. do_e($s);
  104. var_dump($bv1, $bv2);
  105. echo "Test 2.7 In Length: 1. In Type: AFC. Out Length: 1. Out Type: AFC\n";
  106. $bv1 = '';
  107. $r = oci_bind_by_name($s, ':bv1', $bv1, 1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 1, SQLT_AFC);
  108. if ($r)
  109. do_e($s);
  110. var_dump($bv1, $bv2);
  111. echo "\n\nTests with NULL\n";
  112. echo "Test 3.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
  113. $bv1 = null;
  114. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
  115. if ($r)
  116. do_e($s);
  117. var_dump($bv1, $bv2);
  118. echo "Test 3.2 In Length: default. In Type: default. Out Length: 10. Out Type: default\n";
  119. $bv1 = null;
  120. $r = oci_bind_by_name($s, ':bv1', $bv1) && oci_bind_by_name($s, ':bv2', $bv2, 10);
  121. if ($r)
  122. do_e($s);
  123. var_dump($bv1, $bv2);
  124. echo "Test 3.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default\n";
  125. $bv1 = null;
  126. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10);
  127. if ($r)
  128. do_e($s);
  129. var_dump($bv1, $bv2);
  130. echo "Test 3.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC\n";
  131. $bv1 = null;
  132. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 10, SQLT_AFC);
  133. if ($r)
  134. do_e($s);
  135. var_dump($bv1, $bv2);
  136. echo "Test 3.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC\n";
  137. $bv1 = null;
  138. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 0, SQLT_AFC);
  139. if ($r)
  140. do_e($s);
  141. var_dump($bv1, $bv2);
  142. echo "Test 3.6 In Length: -1. In Type: AFC. Out Length: 1. Out Type: AFC\n";
  143. $bv1 = null;
  144. $r = oci_bind_by_name($s, ':bv1', $bv1, -1, SQLT_AFC) && oci_bind_by_name($s, ':bv2', $bv2, 1, SQLT_AFC);
  145. if ($r)
  146. do_e($s);
  147. var_dump($bv1, $bv2);
  148. function do_e($s)
  149. {
  150. echo " Executing:\n";
  151. $r = @oci_execute($s);
  152. if (!$r) {
  153. $m = oci_error($s);
  154. echo " Oci_execute error ORA-".$m['code']."\n";
  155. return;
  156. }
  157. }
  158. // Cleanup
  159. $stmtarray = array(
  160. "drop function bind_char_3_fn"
  161. );
  162. oci8_test_sql_execute($c, $stmtarray);
  163. echo "Done\n";
  164. ?>
  165. --EXPECT--
  166. Test 1.1 In Length: default. In Type: default. Out Length: default. Out Type: default
  167. Executing:
  168. Oci_execute error ORA-6502
  169. string(3) "abc"
  170. NULL
  171. Test 1.2 In Length: default. In Type: default. Out Length: 10. Out Type: default
  172. Executing:
  173. string(3) "abc"
  174. string(3) "abc"
  175. Test 1.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default
  176. Executing:
  177. string(3) "abc"
  178. string(3) "abc"
  179. Test 1.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
  180. Executing:
  181. string(3) "abc"
  182. string(10) "abc "
  183. Test 1.5 In Length: strlen. In Type: AFC. Out Length: strlen(input). Out Type: AFC
  184. Executing:
  185. string(3) "abc"
  186. string(3) "abc"
  187. Test 1.6 In Length: strlen. In Type: AFC. Out Length: strlen(input)-1. Out Type: AFC
  188. Executing:
  189. Oci_execute error ORA-6502
  190. string(3) "abc"
  191. string(3) "abc"
  192. Test 1.7 In Length: strlen. In Type: AFC. Out Length: strlen(input)+1. Out Type: AFC
  193. Executing:
  194. string(3) "abc"
  195. string(4) "abc "
  196. Tests with ''
  197. Test 2.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
  198. Executing:
  199. string(0) ""
  200. NULL
  201. Test 2.2 In Length: default. In Type: default. Out Length: 10. Out Type: default
  202. Executing:
  203. string(0) ""
  204. NULL
  205. Test 2.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default
  206. Executing:
  207. string(0) ""
  208. NULL
  209. Test 2.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
  210. Executing:
  211. string(0) ""
  212. NULL
  213. Test 2.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC
  214. Executing:
  215. string(0) ""
  216. NULL
  217. Test 2.6 In Length: 0. In Type: AFC. Out Length: 0. Out Type: AFC
  218. Executing:
  219. string(0) ""
  220. NULL
  221. Test 2.7 In Length: 1. In Type: AFC. Out Length: 1. Out Type: AFC
  222. Executing:
  223. string(0) ""
  224. NULL
  225. Tests with NULL
  226. Test 3.1 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
  227. Executing:
  228. NULL
  229. NULL
  230. Test 3.2 In Length: default. In Type: default. Out Length: 10. Out Type: default
  231. Executing:
  232. NULL
  233. NULL
  234. Test 3.3 In Length: -1. In Type: AFC. Out Length: 10. Out Type: default
  235. Executing:
  236. NULL
  237. NULL
  238. Test 3.4 In Length: -1. In Type: AFC. Out Length: 10. Out Type: AFC
  239. Executing:
  240. NULL
  241. NULL
  242. Test 3.5 In Length: -1. In Type: AFC. Out Length: 0. Out Type: AFC
  243. Executing:
  244. NULL
  245. NULL
  246. Test 3.6 In Length: -1. In Type: AFC. Out Length: 1. Out Type: AFC
  247. Executing:
  248. NULL
  249. NULL
  250. Done