Oracle XMLPARSE() 函数使用指南
在 Oracle 数据库中,XMLPARSE() 是一个用于将字符串或文本表达式解析为 XMLType 数据类型实例的核心函数。在对 XML 进行 XPath 提取、模式校验或调用 XMLTABLE() 进行关系化投影之前,通常需要使用 XMLPARSE() 将原始字符串转换为可操作的 XML 树结构。
语法
Oracle XMLPARSE() 函数的标准语法如下:
XMLPARSE ( { DOCUMENT | CONTENT } value_expr [ WELLFORMED ] )
参数说明
DOCUMENT:指示待解析的文本必须是一个完整合法的 XML 文档(即必须有且仅有一个根元素节点,且符合 XML 1.0 规范)。如果不符合单一根节点要求,Oracle 将抛出错误。CONTENT:指示待解析的文本是一个 XML 内容片段(可以包含多个同级的根节点、文本节点或空节点)。常用于解析部分 XML 标签片段。value_expr:必需。要解析的输入字符串表达式,可以是VARCHAR2、CHAR或CLOB字段。WELLFORMED(可选):标记该输入已知为良好构造(well-formed)的 XML,Oracle 在解析时会跳过部分昂贵的完整性深度校验,从而显著提升高并发批量处理时的解析性能。
返回值
返回一个合法的 XMLType 实例。如果 value_expr 为 NULL,则返回 NULL。
使用示例
示例 1:使用 DOCUMENT 解析完整 XML 文档
SELECT
XMLPARSE(DOCUMENT '<company id="10"><name>Acme Corp</name></company>' WELLFORMED) AS xml_doc
FROM dual;
如果尝试向 DOCUMENT 模式传入具有多个根节点的文本(例如 '<a>1</a><b>2</b>'),Oracle 会抛出 ORA-31011: XML parsing failed 错误。
示例 2:使用 CONTENT 解析 XML 片段
对于多个并列元素片段,使用 CONTENT 关键字:
SELECT
XMLPARSE(CONTENT '<tag>数据库</tag><tag>教程网</tag>') AS xml_fragment
FROM dual;
示例 3:结合 XMLTABLE 提取节点数据
XMLPARSE() 最常见的应用场景是为 XMLTABLE 或 XMLQUERY 提供合法的 XMLType 输入流:
SELECT x.tag_name
FROM XMLTABLE(
'/tag'
PASSING XMLPARSE(CONTENT '<tag>MySQL</tag><tag>Oracle</tag><tag>PostgreSQL</tag>')
COLUMNS
tag_name VARCHAR2(20) PATH '.'
) x;
常见注意事项
- 命名规范与特殊字符:
输入文本中的特殊字符(如
&,<,>)必须正确转义为&,<,>,否则将导致 XML 语法解析异常。 - 性能优化建议:
在明确数据来源可靠且格式严谨的 ETL 批量入库场景中,附带
WELLFORMED关键字能够降低 CPU 解析开销。
相关 XML 函数与工具
- 📚 Oracle XML 函数参考指南:系统查看所有 Oracle XML 核心函数
- 📊 XMLTABLE() 函数:将解析后的 XML 映射为二维关系表
- 📤 XMLSERIALIZE() 函数:将 XMLType 重新输出为可读字符串或 CLOB
- 🛠️ SQL 格式化工具:一键排版长 SQL 与 XML 复杂查询语句