xref: /PHP-8.0/ext/oci8/tests/bug37220.phpt (revision e94731f1)
1--TEST--
2Bug #37220 (LOB Type mismatch when using windows & oci8.dll)
3--SKIPIF--
4<?php
5$target_dbs = array('oracledb' => true, 'timesten' => false);  // test runs on these DBs
6require(__DIR__.'/skipif.inc');
7?>
8--FILE--
9<?php
10
11require __DIR__.'/connect.inc';
12
13// Initialization
14
15$stmtarray = array(
16    "create table bug37220_tab( mycolumn xmltype not null)",
17    "insert into bug37220_tab values(xmltype('<THETAG myID=\"1234\"></THETAG>'))"
18);
19
20oci8_test_sql_execute($c, $stmtarray);
21
22// Now let's update the row where myId = 1234 and change the tag
23// 'THETAG' to 'MYTAG' (mycolumn is an XMLTYPE datatype and
24// bug37220_tab a normal Oracle table)
25
26$query = "UPDATE  bug37220_tab
27          SET     bug37220_tab.mycolumn = updateXML(bug37220_tab.mycolumn,'/THETAG',xmltype.createXML(:data))
28          WHERE   existsNode(bug37220_tab.mycolumn,'/THETAG[@myID=\"1234\"]') = 1";
29$stmt = oci_parse ($c, $query);
30$clob = oci_new_descriptor($c, OCI_D_LOB);
31oci_bind_by_name($stmt, ':data', $clob, -1, OCI_B_CLOB);
32$clob->writeTemporary("<MYTAG/>", OCI_TEMP_CLOB);
33$success = oci_execute($stmt, OCI_COMMIT_ON_SUCCESS);
34oci_free_statement($stmt);
35$clob->close();
36
37// Query back the change
38
39$query = "select * from bug37220_tab";
40$stmt = oci_parse ($c, $query);
41
42oci_execute($stmt);
43
44while ($row = oci_fetch_array($stmt, OCI_ASSOC+OCI_RETURN_NULLS)) {
45    foreach ($row as $item) {
46        echo trim($item)."\n";
47    }
48    echo "\n";
49}
50
51// Cleanup
52
53$stmtarray = array(
54    "drop table bug37220_tab"
55);
56
57oci8_test_sql_execute($c, $stmtarray);
58
59echo "Done\n";
60
61?>
62--EXPECT--
63<MYTAG/>
64
65Done
66