imp_res_dbmsoutput.phpt 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. --TEST--
  2. Oracle Database 12c Implicit Result Sets: interleaved with DBMS_OUTPUT
  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_dbmsoutput_tab_1",
  24. "create table imp_res_dbmsoutput_tab_1 (c1 number, c2 varchar2(10))",
  25. "insert into imp_res_dbmsoutput_tab_1 values (1, 'abcde')",
  26. "insert into imp_res_dbmsoutput_tab_1 values (2, 'fghij')",
  27. "insert into imp_res_dbmsoutput_tab_1 values (3, 'klmno')",
  28. "drop table imp_res_dbmsoutput_tab_2",
  29. "create table imp_res_dbmsoutput_tab_2 (c3 varchar2(1))",
  30. "insert into imp_res_dbmsoutput_tab_2 values ('t')",
  31. "insert into imp_res_dbmsoutput_tab_2 values ('u')",
  32. "insert into imp_res_dbmsoutput_tab_2 values ('v')",
  33. "create or replace procedure imp_res_dbmsoutput_proc as
  34. c1 sys_refcursor;
  35. begin
  36. dbms_output.put_line('dbms_output Line 1');
  37. open c1 for select * from imp_res_dbmsoutput_tab_1 order by 1;
  38. dbms_sql.return_result(c1);
  39. dbms_output.put_line('dbms_output Line 2');
  40. open c1 for select * from imp_res_dbmsoutput_tab_2 order by 1;
  41. dbms_sql.return_result(c1);
  42. end;"
  43. );
  44. oci8_test_sql_execute($c, $stmtarray);
  45. function setserveroutputon($c)
  46. {
  47. $s = oci_parse($c, "begin dbms_output.enable(null); end;");
  48. oci_execute($s);
  49. }
  50. function getdbmsoutput_do($c)
  51. {
  52. $s = oci_parse($c, "begin dbms_output.get_line(:ln, :st); end;");
  53. oci_bind_by_name($s, ":ln", $ln, 100);
  54. oci_bind_by_name($s, ":st", $st, -1, SQLT_INT);
  55. $res = [];
  56. while (($succ = oci_execute($s)) && !$st) {
  57. $res[] = $ln; // append each line to the array
  58. }
  59. return $res;
  60. }
  61. setserveroutputon($c);
  62. // Run Test
  63. echo "Test 1\n";
  64. $s = oci_parse($c, "begin imp_res_dbmsoutput_proc(); end;");
  65. oci_execute($s);
  66. var_dump(getdbmsoutput_do($c));
  67. while (($row = oci_fetch_array($s, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
  68. foreach ($row as $item) {
  69. echo " ".$item;
  70. }
  71. echo "\n";
  72. }
  73. echo "\nTest 2\n";
  74. $s = oci_parse($c, "begin imp_res_dbmsoutput_proc(); end;");
  75. oci_execute($s);
  76. while (($row = oci_fetch_array($s, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
  77. foreach ($row as $item) {
  78. echo " ".$item;
  79. }
  80. echo "\n";
  81. }
  82. var_dump(getdbmsoutput_do($c));
  83. // Clean up
  84. $stmtarray = array(
  85. "drop procedure imp_res_dbmsoutput_proc",
  86. "drop table imp_res_dbmsoutput_tab_1",
  87. "drop table imp_res_dbmsoutput_tab_2"
  88. );
  89. oci8_test_sql_execute($c, $stmtarray);
  90. ?>
  91. --EXPECT--
  92. Test 1
  93. array(2) {
  94. [0]=>
  95. string(18) "dbms_output Line 1"
  96. [1]=>
  97. string(18) "dbms_output Line 2"
  98. }
  99. 1 abcde
  100. 2 fghij
  101. 3 klmno
  102. t
  103. u
  104. v
  105. Test 2
  106. 1 abcde
  107. 2 fghij
  108. 3 klmno
  109. t
  110. u
  111. v
  112. array(2) {
  113. [0]=>
  114. string(18) "dbms_output Line 1"
  115. [1]=>
  116. string(18) "dbms_output Line 2"
  117. }