首批通过分布式安全可靠测评,为关键业务系统打造
UPDATEXML
更新时间:2026-03-18 16:26:57
描述
该函数用于修改更新 XMLType 数据的表达式,通过指定一个或者多个 XPath 和 Value 值对,将所输入的原 XMLType 数据的表达式按照指定的顺序将 XPath 查找到的节点更新成 value_expr 指定的更新值。
语法
UPDATEXML
(XMLType_instance,
XPath_string, value_expr
[, XPath_string, value_expr ]...
[, namespace_string ]
)
参数解释
| 字段 | 说明 |
|---|---|
| XMLType_instance | 指定 XMLType 类型的数据,可以是 XMLType 列或者返回类型为 XMLType 的表达式。 |
| XPath_string | 通过 XPath 指定需要更新的 XML 内容。 |
| value_expr | 指定更新值,数据类型可以是 XMLType 类型数据、标量类型(例如 CHAR/VARCHAR2)、CLOB 和 NULL。 |
| namespace_string | 指定 XML 命名空间。 |
返回值
返回 XMLType 数据类型。
使用说明
value_expr可以是NULL、标量和 XMLType 类型的输入。namespace_string是可选项,可以指定 XPath 查找节点的命名空间。
示例
obclient> SELECT UPDATEXML(XMLPARSE(CONTENT '<root><a>aaa</a></root>'), '/root/a/text()', 'bbb') RES FROM DUAL;
+------------------------------+
| RES |
+------------------------------+
| <root>
<a>bbb</a>
</root>
|
+------------------------------+
1 row in set
obclient> SELECT UPDATEXML(XMLPARSE(CONTENT '<root><a>aaa</a></root>'), '/root/a/text()', NULL) RES FROM DUAL;
+------------------------+
| RES |
+------------------------+
| <root>
<a/>
</root>
|
+------------------------+
1 row in set
obclient> SELECT UPDATEXML(XMLPARSE(CONTENT '<root><a>aaa</a></root>'), '/root/a/text()', XMLPARSE(content '<a>bbb</a>')) RES FROM DUAL;
+---------------------------------------------+
| RES |
+---------------------------------------------+
| <root>
<a>
<a>bbb</a>
</a>
</root>
|
+---------------------------------------------+
1 row in set
obclient> SELECT UPDATEXML(XMLPARSE(CONTENT '<root a1="aaa"><a>aaa</a></root>'), '/root/@a1', 'bbb') RES FROM DUAL;
+---------------------------------------+
| RES |
+---------------------------------------+
| <root a1="bbb">
<a>aaa</a>
</root>
|
+---------------------------------------+
1 row in set
obclient> SELECT UPDATEXML(XMLPARSE(CONTENT '<root a1="aaa"><a>aaa</a></root>'), '/root/@a1', NULL) RES FROM DUAL;
+------------------------------------+
| RES |
+------------------------------------+
| <root a1="">
<a>aaa</a>
</root>
|
+------------------------------------+
1 row in set
obclient> SELECT UPDATEXML(XMLPARSE(CONTENT '<root a1="aaa"><a>aaa</a></root>'), '/root/@a1', XMLPARSE(CONTENT '<a>a1</a>')) RES FROM DUAL;
+------------------------------------------+
| RES |
+------------------------------------------+
| <root>
<a>a1</a>
<a>aaa</a>
</root>
|
+------------------------------------------+
1 row in set
obclient> SELECT UPDATEXML(XMLPARSE(CONTENT '<root><a>aaa</a></root>'), '/root/a', 'bbb') RES FROM DUAL;
+-------------------+
| RES |
+-------------------+
| <root>bbb</root>
|
+-------------------+
1 row in set
obclient> SELECT UPDATEXML(XMLPARSE(CONTENT '<a a1="a1" xmlns:f="ns1" xmlns="ns2"><c/>cccc</a>'), '/a', NULL, 'xmlns="ns2"') RES FROM DUAL;
+-------------------+
| RES |
+-------------------+
| <a xmlns="ns2"/>
|
+-------------------+
1 row in set (0.01 sec)
obclient> SELECT UPDATEXML(XMLPARSE(CONTENT '<root><a>aaa</a></root>'), '/root/a', xmltype('<b>bbb</b>')) RES FROM DUAL;
+------------------------------+
| RES |
+------------------------------+
| <root>
<b>bbb</b>
</root>
|
+------------------------------+
1 row in set