Oracle XMLSERIALIZE() 函数使用指南

在 Oracle 数据库中,XMLSERIALIZE() 是一个用于将 **XMLType 实例序列化转换回标准 SQL 字符串(VARCHAR2、CLOB 或 BLOB)**的内置函数。它不仅支持指定输出的字符集编码,还支持通过 INDENT 选项实现 XML 的优美排版与缩进换行,是数据库端导出 XML 或向外提供 API 接口时的常用工具。


语法

Oracle XMLSERIALIZE() 函数的标准语法如下:

XMLSERIALIZE(
    { DOCUMENT | CONTENT } <xml_type_instance> [ AS <return_type> ]
    [ ENCODING <encoding_val> ]
    [ VERSION <version_val> ]
    [ NO INDENT | INDENT [ SIZE = <indent_spaces> ] ]
    [ { HIDE | SHOW } DEFAULTS ]
)

参数说明

  • DOCUMENT | CONTENT:必需。指定输出目标格式为完整 XML 文档或 XML 内容片段。
  • xml_type_instance:必需。待序列化的 XMLType 表达式。
  • AS return_type(可选):目标 SQL 数据类型,支持 VARCHAR2(n)、CLOB 或 BLOB。默认情况下为 CLOB。如果输出文本较短,显式指定 AS VARCHAR2(4000) 可以避免操作 LOB 带来的性能开销。
  • INDENT / NO INDENT(可选):控制是否对输出的 XML 标签进行美化缩进排版。可指定 INDENT SIZE = 2 或 4。
  • ENCODING(可选):指定输出 XML 声明头中的字符集编码(如 'UTF-8' 或 'GBK')。

返回值

返回指定数据类型(VARCHAR2、CLOB 或 BLOB)的字符串数据。如果输入为 NULL,则返回 NULL。


使用示例

示例 1:将 XMLType 转换为易读的缩进文本

SELECT 
    XMLSERIALIZE(
        DOCUMENT XMLPARSE(DOCUMENT '<root><user id="1"><name>Alice</name></user></root>')
        AS CLOB 
        INDENT SIZE = 2
    ) AS formatted_xml
FROM dual;

输出结果:

<root>
  <user id="1">
    <name>Alice</name>
  </user>
</root>

示例 2:快速转为紧凑的 VARCHAR2 字符串

在数据导出或单行记录传输场景下,使用 NO INDENT 结合 VARCHAR2 可获得最小体积的文本输出:

SELECT 
    XMLSERIALIZE(CONTENT XMLELEMENT("status", 'SUCCESS') AS VARCHAR2(100) NO INDENT) AS result
FROM dual;

输出结果:

<status>SUCCESS</status>

相关 XML 函数与工具