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 函数与工具
- 📚 Oracle XML 函数参考指南:全面掌握 Oracle XML 核心函数体系
- 📥 XMLPARSE() 函数:将文本解析为 XMLType 实例
- 📊 XMLTABLE() 函数:将 XML 展开为关系型行与列
- 📐 SQL 格式化工具:在浏览器中直接美化与高亮 SQL 语句