bug40078.phpt 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. --TEST--
  2. Bug #40078 (ORA-01405 when fetching NULL values using oci_bind_array_by_name())
  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. ?>
  10. --FILE--
  11. <?php
  12. require __DIR__.'/connect.inc';
  13. $create_pkg = "
  14. CREATE OR REPLACE PACKAGE BUG40078_PKG AS
  15. TYPE ARRTYPE IS TABLE OF VARCHAR(20) INDEX BY BINARY_INTEGER;
  16. PROCEDURE nullbind(c1 OUT ARRTYPE);
  17. END BUG40078_PKG;";
  18. $statement = oci_parse($c, $create_pkg);
  19. oci_execute($statement);
  20. $create_pkg_body = "
  21. CREATE OR REPLACE PACKAGE BODY BUG40078_PKG AS
  22. PROCEDURE nullbind(c1 OUT ARRTYPE) IS
  23. BEGIN
  24. c1(1) := 'one';
  25. c1(2) := 'two';
  26. c1(3) := '';
  27. c1(4) := 'four';
  28. c1(5) := 'five';
  29. END nullbind;
  30. END BUG40078_PKG;";
  31. $statement = oci_parse($c, $create_pkg_body);
  32. oci_execute($statement);
  33. $statement = oci_parse($c, "BEGIN bug40078_pkg.nullbind(:c1); END;");
  34. oci_bind_array_by_name($statement, ":c1", $array, 5, 20, SQLT_CHR);
  35. oci_execute($statement);
  36. var_dump($array);
  37. echo "Done\n";
  38. ?>
  39. --EXPECT--
  40. array(5) {
  41. [0]=>
  42. string(3) "one"
  43. [1]=>
  44. string(3) "two"
  45. [2]=>
  46. string(0) ""
  47. [3]=>
  48. string(4) "four"
  49. [4]=>
  50. string(4) "five"
  51. }
  52. Done