imp_res_1.phpt 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628
  1. --TEST--
  2. Oracle Database 12c Implicit Result Sets: basic test
  3. --EXTENSIONS--
  4. oci8
  5. --SKIPIF--
  6. <?php
  7. $target_dbs = array('oracledb' => true, 'timesten' => false); // test runs on these DBs
  8. require(__DIR__.'/skipif.inc');
  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 Database 12c or greater");
  12. }
  13. preg_match('/^[[:digit:]]+/', oci_client_version(), $matches);
  14. if (!(isset($matches[0]) && $matches[0] >= 12)) {
  15. die("skip works only with Oracle 12c or greater version of Oracle client libraries");
  16. }
  17. ?>
  18. --FILE--
  19. <?php
  20. require(__DIR__.'/connect.inc');
  21. // Initialization
  22. $stmtarray = array(
  23. "drop table imp_res_1_tab_1",
  24. "create table imp_res_1_tab_1 (c1 number, c2 varchar2(10))",
  25. "insert into imp_res_1_tab_1 values (1, 'abcde')",
  26. "insert into imp_res_1_tab_1 values (2, 'fghij')",
  27. "insert into imp_res_1_tab_1 values (3, 'klmno')",
  28. "drop table imp_res_1_tab_2",
  29. "create table imp_res_1_tab_2 (c3 varchar2(1))",
  30. "insert into imp_res_1_tab_2 values ('t')",
  31. "insert into imp_res_1_tab_2 values ('u')",
  32. "insert into imp_res_1_tab_2 values ('v')",
  33. "create or replace procedure imp_res_1_proc as
  34. c1 sys_refcursor;
  35. begin
  36. open c1 for select * from imp_res_1_tab_1 order by 1;
  37. dbms_sql.return_result(c1);
  38. open c1 for select * from imp_res_1_tab_2 where rownum < 3 order by 1;
  39. dbms_sql.return_result(c1);
  40. open c1 for select 99 from dual;
  41. dbms_sql.return_result (c1);
  42. open c1 for select NULL, 'Z' from dual;
  43. dbms_sql.return_result (c1);
  44. open c1 for select * from imp_res_1_tab_1 order by 1;
  45. dbms_sql.return_result(c1);
  46. end;"
  47. );
  48. oci8_test_sql_execute($c, $stmtarray);
  49. // Run Test
  50. echo "Test 1 - oci_fetch_assoc\n";
  51. $s = oci_parse($c, "begin imp_res_1_proc(); end;");
  52. oci_execute($s);
  53. while (($row = oci_fetch_assoc($s)) != false)
  54. var_dump($row);
  55. echo "\nTest 2 - oci_fetch_object\n";
  56. $s = oci_parse($c, "begin imp_res_1_proc(); end;");
  57. oci_execute($s);
  58. while (($row = oci_fetch_object($s)) != false)
  59. var_dump($row);
  60. echo "\nTest 3 - oci_fetch_row\n";
  61. $s = oci_parse($c, "begin imp_res_1_proc(); end;");
  62. oci_execute($s);
  63. while (($row = oci_fetch_row($s)) != false)
  64. var_dump($row);
  65. echo "\nTest 4 - oci_fetch_array(OCI_ASSOC+OCI_RETURN_NULLS)\n";
  66. $s = oci_parse($c, "begin imp_res_1_proc(); end;");
  67. oci_execute($s);
  68. while (($row = oci_fetch_array($s, OCI_ASSOC+OCI_RETURN_NULLS)) != false)
  69. var_dump($row);
  70. echo "\nTest 5 - oci_fetch_array(OCI_ASSOC)\n";
  71. $s = oci_parse($c, "begin imp_res_1_proc(); end;");
  72. oci_execute($s);
  73. while (($row = oci_fetch_array($s, OCI_ASSOC)) != false)
  74. var_dump($row);
  75. echo "\nTest 6 - oci_fetch_array(OCI_NUM)\n";
  76. $s = oci_parse($c, "begin imp_res_1_proc(); end;");
  77. oci_execute($s);
  78. while (($row = oci_fetch_array($s, OCI_NUM)) != false)
  79. var_dump($row);
  80. echo "\nTest 7 - oci_fetch_array(OCI_BOTH)\n";
  81. $s = oci_parse($c, "begin imp_res_1_proc(); end;");
  82. oci_execute($s);
  83. while (($row = oci_fetch_array($s, OCI_BOTH)) != false)
  84. var_dump($row);
  85. echo "\nTest 8 - oci_fetch_array(OCI_BOTH+OCI_RETURN_NULLS)\n";
  86. $s = oci_parse($c, "begin imp_res_1_proc(); end;");
  87. oci_execute($s);
  88. while (($row = oci_fetch_array($s, OCI_BOTH+OCI_RETURN_NULLS)) != false)
  89. var_dump($row);
  90. // Clean up
  91. $stmtarray = array(
  92. "drop procedure imp_res_1_proc",
  93. "drop table imp_res_1_tab_1",
  94. "drop table imp_res_1_tab_2"
  95. );
  96. oci8_test_sql_execute($c, $stmtarray);
  97. ?>
  98. --EXPECTF--
  99. Test 1 - oci_fetch_assoc
  100. array(2) {
  101. ["C1"]=>
  102. string(1) "1"
  103. ["C2"]=>
  104. string(5) "abcde"
  105. }
  106. array(2) {
  107. ["C1"]=>
  108. string(1) "2"
  109. ["C2"]=>
  110. string(5) "fghij"
  111. }
  112. array(2) {
  113. ["C1"]=>
  114. string(1) "3"
  115. ["C2"]=>
  116. string(5) "klmno"
  117. }
  118. array(1) {
  119. ["C3"]=>
  120. string(1) "t"
  121. }
  122. array(1) {
  123. ["C3"]=>
  124. string(1) "u"
  125. }
  126. array(1) {
  127. [99]=>
  128. string(2) "99"
  129. }
  130. array(2) {
  131. ["NULL"]=>
  132. NULL
  133. ["'Z'"]=>
  134. string(1) "Z"
  135. }
  136. array(2) {
  137. ["C1"]=>
  138. string(1) "1"
  139. ["C2"]=>
  140. string(5) "abcde"
  141. }
  142. array(2) {
  143. ["C1"]=>
  144. string(1) "2"
  145. ["C2"]=>
  146. string(5) "fghij"
  147. }
  148. array(2) {
  149. ["C1"]=>
  150. string(1) "3"
  151. ["C2"]=>
  152. string(5) "klmno"
  153. }
  154. Test 2 - oci_fetch_object
  155. object(stdClass)#%d (2) {
  156. ["C1"]=>
  157. string(1) "1"
  158. ["C2"]=>
  159. string(5) "abcde"
  160. }
  161. object(stdClass)#%d (2) {
  162. ["C1"]=>
  163. string(1) "2"
  164. ["C2"]=>
  165. string(5) "fghij"
  166. }
  167. object(stdClass)#%d (2) {
  168. ["C1"]=>
  169. string(1) "3"
  170. ["C2"]=>
  171. string(5) "klmno"
  172. }
  173. object(stdClass)#%d (1) {
  174. ["C3"]=>
  175. string(1) "t"
  176. }
  177. object(stdClass)#%d (1) {
  178. ["C3"]=>
  179. string(1) "u"
  180. }
  181. object(stdClass)#%d (1) {
  182. [99]=>
  183. string(2) "99"
  184. }
  185. object(stdClass)#%d (2) {
  186. ["NULL"]=>
  187. NULL
  188. ["'Z'"]=>
  189. string(1) "Z"
  190. }
  191. object(stdClass)#%d (2) {
  192. ["C1"]=>
  193. string(1) "1"
  194. ["C2"]=>
  195. string(5) "abcde"
  196. }
  197. object(stdClass)#%d (2) {
  198. ["C1"]=>
  199. string(1) "2"
  200. ["C2"]=>
  201. string(5) "fghij"
  202. }
  203. object(stdClass)#%d (2) {
  204. ["C1"]=>
  205. string(1) "3"
  206. ["C2"]=>
  207. string(5) "klmno"
  208. }
  209. Test 3 - oci_fetch_row
  210. array(2) {
  211. [0]=>
  212. string(1) "1"
  213. [1]=>
  214. string(5) "abcde"
  215. }
  216. array(2) {
  217. [0]=>
  218. string(1) "2"
  219. [1]=>
  220. string(5) "fghij"
  221. }
  222. array(2) {
  223. [0]=>
  224. string(1) "3"
  225. [1]=>
  226. string(5) "klmno"
  227. }
  228. array(1) {
  229. [0]=>
  230. string(1) "t"
  231. }
  232. array(1) {
  233. [0]=>
  234. string(1) "u"
  235. }
  236. array(1) {
  237. [0]=>
  238. string(2) "99"
  239. }
  240. array(2) {
  241. [0]=>
  242. NULL
  243. [1]=>
  244. string(1) "Z"
  245. }
  246. array(2) {
  247. [0]=>
  248. string(1) "1"
  249. [1]=>
  250. string(5) "abcde"
  251. }
  252. array(2) {
  253. [0]=>
  254. string(1) "2"
  255. [1]=>
  256. string(5) "fghij"
  257. }
  258. array(2) {
  259. [0]=>
  260. string(1) "3"
  261. [1]=>
  262. string(5) "klmno"
  263. }
  264. Test 4 - oci_fetch_array(OCI_ASSOC+OCI_RETURN_NULLS)
  265. array(2) {
  266. ["C1"]=>
  267. string(1) "1"
  268. ["C2"]=>
  269. string(5) "abcde"
  270. }
  271. array(2) {
  272. ["C1"]=>
  273. string(1) "2"
  274. ["C2"]=>
  275. string(5) "fghij"
  276. }
  277. array(2) {
  278. ["C1"]=>
  279. string(1) "3"
  280. ["C2"]=>
  281. string(5) "klmno"
  282. }
  283. array(1) {
  284. ["C3"]=>
  285. string(1) "t"
  286. }
  287. array(1) {
  288. ["C3"]=>
  289. string(1) "u"
  290. }
  291. array(1) {
  292. [99]=>
  293. string(2) "99"
  294. }
  295. array(2) {
  296. ["NULL"]=>
  297. NULL
  298. ["'Z'"]=>
  299. string(1) "Z"
  300. }
  301. array(2) {
  302. ["C1"]=>
  303. string(1) "1"
  304. ["C2"]=>
  305. string(5) "abcde"
  306. }
  307. array(2) {
  308. ["C1"]=>
  309. string(1) "2"
  310. ["C2"]=>
  311. string(5) "fghij"
  312. }
  313. array(2) {
  314. ["C1"]=>
  315. string(1) "3"
  316. ["C2"]=>
  317. string(5) "klmno"
  318. }
  319. Test 5 - oci_fetch_array(OCI_ASSOC)
  320. array(2) {
  321. ["C1"]=>
  322. string(1) "1"
  323. ["C2"]=>
  324. string(5) "abcde"
  325. }
  326. array(2) {
  327. ["C1"]=>
  328. string(1) "2"
  329. ["C2"]=>
  330. string(5) "fghij"
  331. }
  332. array(2) {
  333. ["C1"]=>
  334. string(1) "3"
  335. ["C2"]=>
  336. string(5) "klmno"
  337. }
  338. array(1) {
  339. ["C3"]=>
  340. string(1) "t"
  341. }
  342. array(1) {
  343. ["C3"]=>
  344. string(1) "u"
  345. }
  346. array(1) {
  347. [99]=>
  348. string(2) "99"
  349. }
  350. array(1) {
  351. ["'Z'"]=>
  352. string(1) "Z"
  353. }
  354. array(2) {
  355. ["C1"]=>
  356. string(1) "1"
  357. ["C2"]=>
  358. string(5) "abcde"
  359. }
  360. array(2) {
  361. ["C1"]=>
  362. string(1) "2"
  363. ["C2"]=>
  364. string(5) "fghij"
  365. }
  366. array(2) {
  367. ["C1"]=>
  368. string(1) "3"
  369. ["C2"]=>
  370. string(5) "klmno"
  371. }
  372. Test 6 - oci_fetch_array(OCI_NUM)
  373. array(2) {
  374. [0]=>
  375. string(1) "1"
  376. [1]=>
  377. string(5) "abcde"
  378. }
  379. array(2) {
  380. [0]=>
  381. string(1) "2"
  382. [1]=>
  383. string(5) "fghij"
  384. }
  385. array(2) {
  386. [0]=>
  387. string(1) "3"
  388. [1]=>
  389. string(5) "klmno"
  390. }
  391. array(1) {
  392. [0]=>
  393. string(1) "t"
  394. }
  395. array(1) {
  396. [0]=>
  397. string(1) "u"
  398. }
  399. array(1) {
  400. [0]=>
  401. string(2) "99"
  402. }
  403. array(1) {
  404. [1]=>
  405. string(1) "Z"
  406. }
  407. array(2) {
  408. [0]=>
  409. string(1) "1"
  410. [1]=>
  411. string(5) "abcde"
  412. }
  413. array(2) {
  414. [0]=>
  415. string(1) "2"
  416. [1]=>
  417. string(5) "fghij"
  418. }
  419. array(2) {
  420. [0]=>
  421. string(1) "3"
  422. [1]=>
  423. string(5) "klmno"
  424. }
  425. Test 7 - oci_fetch_array(OCI_BOTH)
  426. array(4) {
  427. [0]=>
  428. string(1) "1"
  429. ["C1"]=>
  430. string(1) "1"
  431. [1]=>
  432. string(5) "abcde"
  433. ["C2"]=>
  434. string(5) "abcde"
  435. }
  436. array(4) {
  437. [0]=>
  438. string(1) "2"
  439. ["C1"]=>
  440. string(1) "2"
  441. [1]=>
  442. string(5) "fghij"
  443. ["C2"]=>
  444. string(5) "fghij"
  445. }
  446. array(4) {
  447. [0]=>
  448. string(1) "3"
  449. ["C1"]=>
  450. string(1) "3"
  451. [1]=>
  452. string(5) "klmno"
  453. ["C2"]=>
  454. string(5) "klmno"
  455. }
  456. array(2) {
  457. [0]=>
  458. string(1) "t"
  459. ["C3"]=>
  460. string(1) "t"
  461. }
  462. array(2) {
  463. [0]=>
  464. string(1) "u"
  465. ["C3"]=>
  466. string(1) "u"
  467. }
  468. array(2) {
  469. [0]=>
  470. string(2) "99"
  471. [99]=>
  472. string(2) "99"
  473. }
  474. array(2) {
  475. [1]=>
  476. string(1) "Z"
  477. ["'Z'"]=>
  478. string(1) "Z"
  479. }
  480. array(4) {
  481. [0]=>
  482. string(1) "1"
  483. ["C1"]=>
  484. string(1) "1"
  485. [1]=>
  486. string(5) "abcde"
  487. ["C2"]=>
  488. string(5) "abcde"
  489. }
  490. array(4) {
  491. [0]=>
  492. string(1) "2"
  493. ["C1"]=>
  494. string(1) "2"
  495. [1]=>
  496. string(5) "fghij"
  497. ["C2"]=>
  498. string(5) "fghij"
  499. }
  500. array(4) {
  501. [0]=>
  502. string(1) "3"
  503. ["C1"]=>
  504. string(1) "3"
  505. [1]=>
  506. string(5) "klmno"
  507. ["C2"]=>
  508. string(5) "klmno"
  509. }
  510. Test 8 - oci_fetch_array(OCI_BOTH+OCI_RETURN_NULLS)
  511. array(4) {
  512. [0]=>
  513. string(1) "1"
  514. ["C1"]=>
  515. string(1) "1"
  516. [1]=>
  517. string(5) "abcde"
  518. ["C2"]=>
  519. string(5) "abcde"
  520. }
  521. array(4) {
  522. [0]=>
  523. string(1) "2"
  524. ["C1"]=>
  525. string(1) "2"
  526. [1]=>
  527. string(5) "fghij"
  528. ["C2"]=>
  529. string(5) "fghij"
  530. }
  531. array(4) {
  532. [0]=>
  533. string(1) "3"
  534. ["C1"]=>
  535. string(1) "3"
  536. [1]=>
  537. string(5) "klmno"
  538. ["C2"]=>
  539. string(5) "klmno"
  540. }
  541. array(2) {
  542. [0]=>
  543. string(1) "t"
  544. ["C3"]=>
  545. string(1) "t"
  546. }
  547. array(2) {
  548. [0]=>
  549. string(1) "u"
  550. ["C3"]=>
  551. string(1) "u"
  552. }
  553. array(2) {
  554. [0]=>
  555. string(2) "99"
  556. [99]=>
  557. string(2) "99"
  558. }
  559. array(4) {
  560. [0]=>
  561. NULL
  562. ["NULL"]=>
  563. NULL
  564. [1]=>
  565. string(1) "Z"
  566. ["'Z'"]=>
  567. string(1) "Z"
  568. }
  569. array(4) {
  570. [0]=>
  571. string(1) "1"
  572. ["C1"]=>
  573. string(1) "1"
  574. [1]=>
  575. string(5) "abcde"
  576. ["C2"]=>
  577. string(5) "abcde"
  578. }
  579. array(4) {
  580. [0]=>
  581. string(1) "2"
  582. ["C1"]=>
  583. string(1) "2"
  584. [1]=>
  585. string(5) "fghij"
  586. ["C2"]=>
  587. string(5) "fghij"
  588. }
  589. array(4) {
  590. [0]=>
  591. string(1) "3"
  592. ["C1"]=>
  593. string(1) "3"
  594. [1]=>
  595. string(5) "klmno"
  596. ["C2"]=>
  597. string(5) "klmno"
  598. }