XMLSERIALIZE
XMLSERIALIZE 函数返回从 XML-expression 自变量生成的指定数据类型的序列化 XML 值。
- 内容
- 指定可以指定任何 XML 值,并且序列化的结果基于此输入值。
- XML 表达式
- 返回作为内置 XML 字符串的值的表达式。 这是序列化过程的输入。
- AS 数据类型
- 指定结果类型。 指定结果数据类型的隐式或显式长度属性必须足以包含序列化输出。
如果指定了 CCSID 并且 data-type 是 GRAPHIC , VARGRAPHIC 或 DBCLOB ,那么 CCSID 必须是 Unicode CCSID。
如果未指定 CCSID 属性,那么将按照 CAST 规范中的描述来确定 CCSID。
- VERSION "1.0"
- 指定序列化值的 XML 版本。 唯一受支持的版本是必须指定为字符串常量的 "1.0"。
- 不包括XML声明或 INCLUDING XML声明
- 指定是否在结果中包含 XML 声明。 缺省值为排除XML声明。
- 排除XML声明
- 指定结果中不包含 XML 声明。
- 包括XML声明
- 指定结果中包含 XML 声明。 XML 声明是字符串'<?xml version=" 1.0 " encoding= "encoding-name "?>,其中 encoding-name 与结果数据类型的 CCSID 一致。
如果 XML-expression 的结果可以为空,那么结果可以为空; 如果 XML-expression 的结果为空,那么结果为空值。
示例
示例 1: 序列化为 UTF-8的 CLOB ,这是 XMLELEMENT 函数返回的 XML 值,它是一个简单 XML 元素,将 "Emp" 作为元素名称,将员工名称作为元素内容:
SELECT e.empno, XMLSERIALIZE(XMLELEMENT(NAME "Emp",
e.firstnme || ' ' ||e.lastname)
AS CLOB(100) CCSID 1208) AS "result"
FROM employee e WHERE e.lastname = 'SMITH'结果类似于以下结果: EMPNO result
----- ---------------------
000250 <Emp>DANIEL SMITH</Emp>
000300 <Emp>PHILIP SMITH</Emp>示例 2: 序列化为 BLOB 类型的字符串,即 XMLELEMENT 函数返回的 XML 值:
SELECT XMLSERIALIZE(XMLELEMENT(NAME "Emp",
e.firstnme || ' ' ||e.lastname)
AS BLOB(1K)
VERSION '1.0') AS "result"
FROM employee e WHERE e.empno = '000300'结果类似于以下结果: result
---------------------
<Emp>PHILIP SMITH</Emp>
示例 3: 序列化为 CLOB 类型的字符串,即 XMLELEMENT 函数返回的 XML 值。 包含XML声明:
SELECT e.empno, e.firstnme, e.lastname,
XMLSERIALIZE(XMLELEMENT(NAME "xmp:Emp",
XMLNAMESPACES('http://www.xmp.com' as "xmp"),
XMLATTRIBUTES(e.empno as "serial"),
e.firstnme, e.lastname
OPTION NULL ON NULL)
AS CLOB(1000) CCSID 1208
INCLUDING XMLDECLARATION) AS "Result"
FROM employee e WHERE e.empno = '000300'结果类似于以下结果: EMPNO FIRSTNME LASTNAME Result
------ --------- --------- -----------------------
000300 PHILIP SMITH <?xml version="1.0" encoding="UTF-8" ?>
<xmp:Emp xmlns:xmp="http://www.xmp.com"
serial="000300">PHILIPSMITH</xmp:Emp>
