imp_res_dbmsoutput.phpt 3.5 KB

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