123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- --TEST--
- Test null data for CLOBs
- --EXTENSIONS--
- oci8
- --SKIPIF--
- <?php
- $target_dbs = array('oracledb' => true, 'timesten' => false); // test runs on these DBs
- require(__DIR__.'/skipif.inc');
- ?>
- --FILE--
- <?php
- require __DIR__.'/connect.inc';
- error_reporting(E_ALL ^ E_DEPRECATED);
- // Initialization
- $s = oci_parse($c, 'drop table lob_null_tab');
- @oci_execute($s);
- $s = oci_parse($c, 'create table lob_null_tab (id number, data clob)');
- oci_execute($s);
- $s = oci_parse($c,
- 'create or replace procedure lob_null_proc_in (pid in number, pdata in CLOB)
- as begin
- insert into lob_null_tab (id, data) values (pid, pdata);
- end;');
- oci_execute($s);
- $s = oci_parse($c,
- 'create or replace procedure lob_null_proc_out (pid in number, pdata out clob)
- as begin
- select data into pdata from lob_null_tab where id = pid;
- end;');
- oci_execute($s);
- // TEMPORARY CLOB
- echo "Temporary CLOB: NULL\n";
- $s = oci_parse($c, "insert into lob_null_tab values (1, :b)");
- $lob = oci_new_descriptor($c, OCI_D_LOB);
- oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
- $lob->writeTemporary(null);
- $r = @oci_execute($s);
- if (!$r) {
- $m = oci_error($s);
- echo $m['message'], "\n";
- }
- else {
- $lob->close();
- }
- echo "Temporary CLOB: ''\n";
- $s = oci_parse($c, "insert into lob_null_tab values (2, :b)");
- $lob = oci_new_descriptor($c, OCI_D_LOB);
- oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
- $lob->writeTemporary('');
- $r = @oci_execute($s);
- if (!$r) {
- $m = oci_error($s);
- echo $m['message'], "\n";
- }
- else {
- $lob->close();
- }
- echo "Temporary CLOB: text\n";
- $s = oci_parse($c, "insert into lob_null_tab values (3, :b)");
- $lob = oci_new_descriptor($c, OCI_D_LOB);
- oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
- $lob->writeTemporary('Inserted via SQL statement');
- $r = @oci_execute($s);
- if (!$r) {
- $m = oci_error($s);
- echo $m['message'], "\n";
- }
- else {
- $lob->close();
- }
- // PROCEDURE PARAMETER
- echo "Procedure parameter: NULL\n";
- $s = oci_parse($c, "call lob_null_proc_in(4, :b)");
- $lob = oci_new_descriptor($c, OCI_D_LOB);
- oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
- $lob->writeTemporary(null);
- $r = @oci_execute($s);
- if (!$r) {
- $m = oci_error($s);
- echo $m['message'], "\n";
- }
- else {
- $lob->close();
- }
- echo "Procedure parameter: ''\n";
- $s = oci_parse($c, "call lob_null_proc_in(5, :b)");
- $lob = oci_new_descriptor($c, OCI_D_LOB);
- oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
- $lob->writeTemporary('');
- $r = @oci_execute($s);
- if (!$r) {
- $m = oci_error($s);
- echo $m['message'], "\n";
- }
- else {
- $lob->close();
- }
- echo "Procedure parameter: text\n";
- $s = oci_parse($c, "call lob_null_proc_in(6, :b)");
- $lob = oci_new_descriptor($c, OCI_D_LOB);
- oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
- $lob->writeTemporary('Inserted via procedure parameter');
- $r = @oci_execute($s);
- if (!$r) {
- $m = oci_error($s);
- echo $m['message'], "\n";
- }
- else {
- $lob->close();
- }
- // RETURNING INTO
- echo "RETURNING INTO: null\n";
- $s = oci_parse($c, "insert into lob_null_tab values (7, empty_clob()) returning data into :b");
- $lob = oci_new_descriptor($c, OCI_D_LOB);
- oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
- oci_execute($s, OCI_DEFAULT); // Must have OCI_DEFAULT here so locator is still valid
- $lob->save(null);
- echo "RETURNING INTO: ''\n";
- $s = oci_parse($c, "insert into lob_null_tab values (8, empty_clob()) returning data into :b");
- $lob = oci_new_descriptor($c, OCI_D_LOB);
- oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
- oci_execute($s, OCI_DEFAULT); // Must have OCI_DEFAULT here so locator is still valid
- $lob->save('');
- echo "RETURNING INTO: text\n";
- $s = oci_parse($c, "insert into lob_null_tab values (9, empty_clob()) returning data into :b");
- $lob = oci_new_descriptor($c, OCI_D_LOB);
- oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
- oci_execute($s, OCI_DEFAULT); // Must have OCI_DEFAULT here so locator is still valid
- $lob->save('Inserted with RETURNING INTO');
- echo "Fetch as string\n";
- $s = oci_parse ($c, 'select id, data from lob_null_tab order by id');
- oci_execute($s);
- oci_fetch_all($s, $res);
- var_dump($res);
- echo "\nFetch as a descriptor\n";
- $s = oci_parse ($c, 'select id, data from lob_null_tab order by id');
- oci_execute($s);
- while ($arr = oci_fetch_assoc($s)) {
- if (is_object($arr['DATA'])) {
- echo $arr['ID'] . " is an object: ";
- $r = $arr['DATA']->load();
- var_dump($r);
- }
- else {
- echo $arr['ID'] . " is not an object\n";
- }
- }
- echo "\nFetch via the procedure parameter\n";
- for ($i = 1; $i <= 9; $i++)
- {
- $s = oci_parse ($c, "call lob_null_proc_out($i, :b)");
- $lob = oci_new_descriptor($c, OCI_D_LOB);
- oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
- oci_execute($s);
- if (is_object($lob)) {
- echo $i . " is an object: ";
- $r = $lob->load();
- var_dump($r);
- }
- else {
- echo $i . " is not an object\n";
- }
- }
- // Cleanup
- $s = oci_parse($c, 'drop table lob_null_tab');
- @oci_execute($s);
- echo "Done\n";
- ?>
- --EXPECT--
- Temporary CLOB: NULL
- Temporary CLOB: ''
- Temporary CLOB: text
- Procedure parameter: NULL
- Procedure parameter: ''
- Procedure parameter: text
- RETURNING INTO: null
- RETURNING INTO: ''
- RETURNING INTO: text
- Fetch as string
- array(2) {
- ["ID"]=>
- array(9) {
- [0]=>
- string(1) "1"
- [1]=>
- string(1) "2"
- [2]=>
- string(1) "3"
- [3]=>
- string(1) "4"
- [4]=>
- string(1) "5"
- [5]=>
- string(1) "6"
- [6]=>
- string(1) "7"
- [7]=>
- string(1) "8"
- [8]=>
- string(1) "9"
- }
- ["DATA"]=>
- array(9) {
- [0]=>
- string(0) ""
- [1]=>
- string(0) ""
- [2]=>
- string(26) "Inserted via SQL statement"
- [3]=>
- string(0) ""
- [4]=>
- string(0) ""
- [5]=>
- string(32) "Inserted via procedure parameter"
- [6]=>
- string(0) ""
- [7]=>
- string(0) ""
- [8]=>
- string(28) "Inserted with RETURNING INTO"
- }
- }
- Fetch as a descriptor
- 1 is an object: string(0) ""
- 2 is an object: string(0) ""
- 3 is an object: string(26) "Inserted via SQL statement"
- 4 is an object: string(0) ""
- 5 is an object: string(0) ""
- 6 is an object: string(32) "Inserted via procedure parameter"
- 7 is an object: string(0) ""
- 8 is an object: string(0) ""
- 9 is an object: string(28) "Inserted with RETURNING INTO"
- Fetch via the procedure parameter
- 1 is an object: string(0) ""
- 2 is an object: string(0) ""
- 3 is an object: string(26) "Inserted via SQL statement"
- 4 is an object: string(0) ""
- 5 is an object: string(0) ""
- 6 is an object: string(32) "Inserted via procedure parameter"
- 7 is an object: string(0) ""
- 8 is an object: string(0) ""
- 9 is an object: string(28) "Inserted with RETURNING INTO"
- Done
|