首批通过分布式安全可靠测评,为关键业务系统打造
INSERTCHILDXML
更新时间:2026-03-18 14:43:56
描述
该函数用于将指定的 XML 片段插入到目标 XML 中,插入位置由 XPath 表达式指示的节点决定。
语法
INSERTCHILDXML( XMLType_instance, XPath_string, child_expr, value_expr [, namespace_string ])
参数解释
| 字段 | 说明 |
|---|---|
| XMLType_instance | 指定一个 XMLType 实例,表示目标 XML 文档。 |
| XPath_string | XPath 表达式,指示要插入一个或多个子节点的一个或多个目标节点。可以使用绝对路径(以斜杠开头)或相对路径(省略初始斜杠)。如果省略初始斜杠,则相对路径的上下文默认为根节点。 |
| child_expr | 指定一个或多个要插入的元素或属性节点。 |
| value_expr | 指定一个 XMLType 片段,指定要插入的一个或多个节点。它必须解析为一个字符串或者 XMLType。 |
| namespace_string | 可选项,用于为 XPath_string 提供命名空间信息。 |
说明
插入的父节点如果还有命名空间,但是待插入的值没有,就要遍历增加空的命名空间。
返回类型
返回 XMLType 数据类型。
示例
使用
INSERTCHILDXML函数向目标 XML 中插入一个子节点。其中,目标 XML 是<bookstore>节点及其子节点;XPath 表达式是/bookstore,它指示要将子节点插入到<bookstore>节点中;要插入的子节点名是price;要插入的子节点的内容是一个 XMLType 实例,表示<price>99.9</price>;查询的结果使用AS关键字重命名为result;最后,从dual表中检索结果。SELECT INSERTCHILDXML( XMLtype('<bookstore> <book att="old"></book> <author>carrot</author> </bookstore>'), '/bookstore', 'price', XMLtype('<price>99.9</price>') ) AS result FROM dual;返回结果如下:
+-----------------------------------------------------------------------------------------------+ | RESULT | +-----------------------------------------------------------------------------------------------+ | <bookstore> <book att="old"/> <author>carrot</author> <price>99.9</price> </bookstore> | +-----------------------------------------------------------------------------------------------+ 1 row in set插入一个节点。
SELECT INSERTCHILDXML( xmltype( '<bookstore> <book att="old"></book> <author>carrot</author> </bookstore>' ), '/bookstore/book', 'a', xmltype('<a><b/></a>') ) FROM dual;返回结果如下:
+----------------------------------------------------------------------------------------------------------------------------------------------+ | INSERTCHILDXML(XMLTYPE('<BOOKSTORE><BOOKATT="OLD"></BOOK><AUTHOR>CARROT</AUTHOR></BOOKSTORE>'),'/BOOKSTORE/BOOK','A',XMLTYPE('<A><B/></A>')) | +----------------------------------------------------------------------------------------------------------------------------------------------+ | <bookstore> <book att="old"> <a> <b/> </a> </book> <author>carrot</author> </bookstore> | +----------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set如果xpath查出多个,都会插入进去
SELECT INSERTCHILDXML( xmltype( '<bookstore> <book att="old"></book> <book></book> <author>carrot</author> </bookstore>' ), '/bookstore/book', 'price', xmltype('<price>99.9</price>') ) FROM dual;返回结果如下:
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | INSERTCHILDXML(XMLTYPE('<BOOKSTORE><BOOKATT="OLD"></BOOK><BOOK></BOOK><AUTHOR>CARROT</AUTHOR></BOOKSTORE>'),'/BOOKSTORE/BOOK','PRICE',XMLTYPE('<PRICE>99.9</PRICE>')) | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | <bookstore> <book att="old"> <price>99.9</price> </book> <book> <price>99.9</price> </book> <author>carrot</author> </bookstore> | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set插入属性。
SELECT INSERTCHILDXML( xmltype( '<bookstore> <book att="old"></book> <author>carrot</author> </bookstore>' ), '/bookstore/book', '@att2', 'abc' ) FROM dual;返回结果如下:
+---------------------------------------------------------------------------------------------------------------------------------+ | INSERTCHILDXML(XMLTYPE('<BOOKSTORE><BOOKATT="OLD"></BOOK><AUTHOR>CARROT</AUTHOR></BOOKSTORE>'),'/BOOKSTORE/BOOK','@ATT2','ABC') | +---------------------------------------------------------------------------------------------------------------------------------+ | <bookstore> <book att="old" att2="abc"/> <author>carrot</author> </bookstore> | +---------------------------------------------------------------------------------------------------------------------------------+ 1 row in set