Annotation of embedaddon/php/ext/oci8/tests/lob_null.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: Test null data for CLOBs
! 3: --SKIPIF--
! 4: <?php
! 5: $target_dbs = array('oracledb' => true, 'timesten' => false); // test runs on these DBs
! 6: require(dirname(__FILE__).'/skipif.inc');
! 7: ?>
! 8: --FILE--
! 9: <?php
! 10:
! 11: require dirname(__FILE__).'/connect.inc';
! 12:
! 13: // Initialization
! 14:
! 15: $s = oci_parse($c, 'drop table lob_null_tab');
! 16: @oci_execute($s);
! 17:
! 18: $s = oci_parse($c, 'create table lob_null_tab (id number, data clob)');
! 19: oci_execute($s);
! 20:
! 21: $s = oci_parse($c,
! 22: 'create or replace procedure lob_null_proc_in (pid in number, pdata in CLOB)
! 23: as begin
! 24: insert into lob_null_tab (id, data) values (pid, pdata);
! 25: end;');
! 26: oci_execute($s);
! 27:
! 28: $s = oci_parse($c,
! 29: 'create or replace procedure lob_null_proc_out (pid in number, pdata out clob)
! 30: as begin
! 31: select data into pdata from lob_null_tab where id = pid;
! 32: end;');
! 33: oci_execute($s);
! 34:
! 35: // TEMPORARY CLOB
! 36:
! 37: echo "Temporary CLOB: NULL\n";
! 38: $s = oci_parse($c, "insert into lob_null_tab values (1, :b)");
! 39: $lob = oci_new_descriptor($c, OCI_D_LOB);
! 40: oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
! 41: $lob->writeTemporary(null);
! 42: $r = @oci_execute($s);
! 43: if (!$r) {
! 44: $m = oci_error($s);
! 45: echo $m['message'], "\n";
! 46: }
! 47: else {
! 48: $lob->close();
! 49: }
! 50:
! 51: echo "Temporary CLOB: ''\n";
! 52: $s = oci_parse($c, "insert into lob_null_tab values (2, :b)");
! 53: $lob = oci_new_descriptor($c, OCI_D_LOB);
! 54: oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
! 55: $lob->writeTemporary('');
! 56: $r = @oci_execute($s);
! 57: if (!$r) {
! 58: $m = oci_error($s);
! 59: echo $m['message'], "\n";
! 60: }
! 61: else {
! 62: $lob->close();
! 63: }
! 64:
! 65: echo "Temporary CLOB: text\n";
! 66: $s = oci_parse($c, "insert into lob_null_tab values (3, :b)");
! 67: $lob = oci_new_descriptor($c, OCI_D_LOB);
! 68: oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
! 69: $lob->writeTemporary('Inserted via SQL statement');
! 70: $r = @oci_execute($s);
! 71: if (!$r) {
! 72: $m = oci_error($s);
! 73: echo $m['message'], "\n";
! 74: }
! 75: else {
! 76: $lob->close();
! 77: }
! 78:
! 79: // PROCEDURE PARAMETER
! 80:
! 81: echo "Procedure parameter: NULL\n";
! 82: $s = oci_parse($c, "call lob_null_proc_in(4, :b)");
! 83: $lob = oci_new_descriptor($c, OCI_D_LOB);
! 84: oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
! 85: $lob->writeTemporary(null);
! 86: $r = @oci_execute($s);
! 87: if (!$r) {
! 88: $m = oci_error($s);
! 89: echo $m['message'], "\n";
! 90: }
! 91: else {
! 92: $lob->close();
! 93: }
! 94:
! 95: echo "Procedure parameter: ''\n";
! 96: $s = oci_parse($c, "call lob_null_proc_in(5, :b)");
! 97: $lob = oci_new_descriptor($c, OCI_D_LOB);
! 98: oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
! 99: $lob->writeTemporary('');
! 100: $r = @oci_execute($s);
! 101: if (!$r) {
! 102: $m = oci_error($s);
! 103: echo $m['message'], "\n";
! 104: }
! 105: else {
! 106: $lob->close();
! 107: }
! 108:
! 109: echo "Procedure parameter: text\n";
! 110: $s = oci_parse($c, "call lob_null_proc_in(6, :b)");
! 111: $lob = oci_new_descriptor($c, OCI_D_LOB);
! 112: oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
! 113: $lob->writeTemporary('Inserted via procedure parameter');
! 114: $r = @oci_execute($s);
! 115: if (!$r) {
! 116: $m = oci_error($s);
! 117: echo $m['message'], "\n";
! 118: }
! 119: else {
! 120: $lob->close();
! 121: }
! 122:
! 123: // RETURNING INTO
! 124:
! 125: echo "RETURNING INTO: null\n";
! 126: $s = oci_parse($c, "insert into lob_null_tab values (7, empty_clob()) returning data into :b");
! 127: $lob = oci_new_descriptor($c, OCI_D_LOB);
! 128: oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
! 129: oci_execute($s, OCI_DEFAULT); // Must have OCI_DEFAULT here so locator is still valid
! 130: $lob->save(null);
! 131:
! 132: echo "RETURNING INTO: ''\n";
! 133: $s = oci_parse($c, "insert into lob_null_tab values (8, empty_clob()) returning data into :b");
! 134: $lob = oci_new_descriptor($c, OCI_D_LOB);
! 135: oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
! 136: oci_execute($s, OCI_DEFAULT); // Must have OCI_DEFAULT here so locator is still valid
! 137: $lob->save('');
! 138:
! 139: echo "RETURNING INTO: text\n";
! 140: $s = oci_parse($c, "insert into lob_null_tab values (9, empty_clob()) returning data into :b");
! 141: $lob = oci_new_descriptor($c, OCI_D_LOB);
! 142: oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
! 143: oci_execute($s, OCI_DEFAULT); // Must have OCI_DEFAULT here so locator is still valid
! 144: $lob->save('Inserted with RETURNING INTO');
! 145:
! 146: echo "Fetch as string\n";
! 147: $s = oci_parse ($c, 'select id, data from lob_null_tab order by id');
! 148: oci_execute($s);
! 149: oci_fetch_all($s, $res);
! 150: var_dump($res);
! 151:
! 152: echo "\nFetch as a descriptor\n";
! 153: $s = oci_parse ($c, 'select id, data from lob_null_tab order by id');
! 154: oci_execute($s);
! 155: while ($arr = oci_fetch_assoc($s)) {
! 156: if (is_object($arr['DATA'])) {
! 157: echo $arr['ID'] . " is an object: ";
! 158: $r = $arr['DATA']->load();
! 159: var_dump($r);
! 160: }
! 161: else {
! 162: echo $arr['ID'] . " is not an object\n";
! 163: }
! 164: }
! 165:
! 166: echo "\nFetch via the procedure parameter\n";
! 167: for ($i = 1; $i <= 9; $i++)
! 168: {
! 169: $s = oci_parse ($c, "call lob_null_proc_out($i, :b)");
! 170: $lob = oci_new_descriptor($c, OCI_D_LOB);
! 171: oci_bind_by_name($s, ':b', $lob, -1, OCI_B_CLOB);
! 172: oci_execute($s);
! 173: if (is_object($lob)) {
! 174: echo $i . " is an object: ";
! 175: $r = $lob->load();
! 176: var_dump($r);
! 177: }
! 178: else {
! 179: echo $i . " is not an object\n";
! 180: }
! 181: }
! 182:
! 183: // Cleanup
! 184:
! 185: $s = oci_parse($c, 'drop table lob_null_tab');
! 186: @oci_execute($s);
! 187:
! 188: echo "Done\n";
! 189:
! 190: ?>
! 191: --EXPECTF--
! 192: Temporary CLOB: NULL
! 193: Temporary CLOB: ''
! 194: Temporary CLOB: text
! 195: Procedure parameter: NULL
! 196: Procedure parameter: ''
! 197: Procedure parameter: text
! 198: RETURNING INTO: null
! 199: RETURNING INTO: ''
! 200: RETURNING INTO: text
! 201: Fetch as string
! 202: array(2) {
! 203: ["ID"]=>
! 204: array(9) {
! 205: [0]=>
! 206: string(1) "1"
! 207: [1]=>
! 208: string(1) "2"
! 209: [2]=>
! 210: string(1) "3"
! 211: [3]=>
! 212: string(1) "4"
! 213: [4]=>
! 214: string(1) "5"
! 215: [5]=>
! 216: string(1) "6"
! 217: [6]=>
! 218: string(1) "7"
! 219: [7]=>
! 220: string(1) "8"
! 221: [8]=>
! 222: string(1) "9"
! 223: }
! 224: ["DATA"]=>
! 225: array(9) {
! 226: [0]=>
! 227: string(0) ""
! 228: [1]=>
! 229: string(0) ""
! 230: [2]=>
! 231: string(26) "Inserted via SQL statement"
! 232: [3]=>
! 233: string(0) ""
! 234: [4]=>
! 235: string(0) ""
! 236: [5]=>
! 237: string(32) "Inserted via procedure parameter"
! 238: [6]=>
! 239: string(0) ""
! 240: [7]=>
! 241: string(0) ""
! 242: [8]=>
! 243: string(28) "Inserted with RETURNING INTO"
! 244: }
! 245: }
! 246:
! 247: Fetch as a descriptor
! 248: 1 is an object: string(0) ""
! 249: 2 is an object: string(0) ""
! 250: 3 is an object: string(26) "Inserted via SQL statement"
! 251: 4 is an object: string(0) ""
! 252: 5 is an object: string(0) ""
! 253: 6 is an object: string(32) "Inserted via procedure parameter"
! 254: 7 is an object: string(0) ""
! 255: 8 is an object: string(0) ""
! 256: 9 is an object: string(28) "Inserted with RETURNING INTO"
! 257:
! 258: Fetch via the procedure parameter
! 259: 1 is an object: string(0) ""
! 260: 2 is an object: string(0) ""
! 261: 3 is an object: string(26) "Inserted via SQL statement"
! 262: 4 is an object: string(0) ""
! 263: 5 is an object: string(0) ""
! 264: 6 is an object: string(32) "Inserted via procedure parameter"
! 265: 7 is an object: string(0) ""
! 266: 8 is an object: string(0) ""
! 267: 9 is an object: string(28) "Inserted with RETURNING INTO"
! 268: Done
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>