XMLSERIALIZE

XMLSERIALIZE 函数返回从 XML-expression 自变量生成的指定数据类型的序列化 XML 值。

读取语法图跳过可视语法图XMLSERIALIZE(CONTENTXML 表达式AS数据类型VERSION'1.0'1EXCLUDING XMLDECLARATIONINCLUDING XMLDECLARATION )
数据类型
读取语法图跳过可视语法图CHARACTERCHAR(1)(整数)CHARACTERCHARVARYINGVARCHAR(整数)FOR BIT DATAFOR SBCS DATAFOR MIXED DATAccsid-子句CHARACTERCHARLARGE OBJECTCLOB(1M)(整数KMG)FOR SBCS DATAFOR MIXED DATAccsid-子句GRAPHIC(1)(整数)GRAPHIC VARYINGVARGRAPHIC(整数)DBCLOB(1M)(整数KMG)ccsid-子句NATIONAL CHARACTERNATIONAL CHARNCHAR(1)(整数)NATIONAL CHARACTERNATIONAL CHARNCHARVARYINGNVARCHAR(整数)NATIONAL CHARACTERNCHARLARGE OBJECTNCLOB(1M)(整数KMG)Normalize-子句BINARY(1)(整数)BINARY VARYINGVARBINARY(整数)BINARY LARGE OBJECTBLOB(1M)(整数KMG)
注:
  • 1 不能多次指定同一子句。
ccsid-子句
读取语法图跳过可视语法图CCSID整数Normalize-子句
normalize-子句
读取语法图跳过可视语法图NOT NORMALIZEDNORMALIZED
内容
指定可以指定任何 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>