XMLFOREST 标量函数 (scalar function)
XMLFOREST函数返回一个XML值,该值是XML元素节点的序列。
该模式是 SYSIBM。
- xmlnamespace-function
- 指定作为XMLNAMESPACES函数结果的XML命名空间声明。 声明的名称空间在 XMLFOREST
函数作用域中。 命名空间适用于XMLFOREST函数中的任何嵌套XML函数,无论这些函数是否出现在另一个子选择中。 有关声明XML命名空间的更多信息,请参见 XMLNAMESPACES标量函数。
如果未指定 xmlnamespace-function ,则命名空间声明与构造的XML元素节点序列无关。
- 元素-内容-表达
- 指定一个表达式,该表达式返回一个值,用于生成的XML元素的内容。 根据SQL值到XML值的映射规则,表达的结果映射到XML值。 如果表达式不是简单的列引用,则必须指定元素名称。
- AS 元素名称
- 指定用于XML元素名称的标识符。
XML元素名称必须是XML QName。 如果名称是限定名称,则必须在作用域内声明命名空间前缀。
如果未指定元素名称 ,则元素内容表达式必须为列名。 元素名称是通过列名创建的,使用从列名到QName的全转义映射。
- 选项
- 指定空值、二进制数据和位数据结果的选项。 元素内容表达式中出现的XMLELEMENT或XMLFOREST函数不会继承这些选项。
- EMPTY ON NULL 或 NULL ON NULL
- 指定当每个元素内容表达式的值为空时,是否返回空值或空元素。 EMPTY ON NULL和NULL on NULL仅影响元素内容表达式参数的null处理,不影响 xmlattributes-function参数的值处理。
- EMPTY ON NULL
- 如果每个 element-content-expression
的值都为空,那么会返回空元素。
默认值为空值。
- NULL ON NULL
- 如果每个 element-content-expression 的值为空,那么会返回空值。
- XMLBINARY USING BASE64 或 XMLBINARY USING HEX
- 指定二进制输入数据、带有 FOR BIT DATA 属性的字符串数据、ROWID 或基于这些类型之一的不同类型的假定编码。 该编码适用于元素内容或属性值。
- XMLBINARY USING BASE64
- 根据对 XML 模式类型 xs:base64Binary 编码的定义,指定采用编码为基本
64 位字符。
base64 编码使用美国信息交换标准码(US-ASCII)的64个字符子集(10位数字、26个小写字母、26个大写字母、“+”和“/”)来表示二进制或位数据的每6位,用一个子集中的可打印字符来表示。 这些字符已被选中,所以它们是以可通用的方式表示的。 此外,“=”字符表示行垫字符。
使用这种方法,编码数据的大小比原始二进制或位数据大33%。XMLBINARY USING BASE64 是默认值。
- XMLBINARY USING HEX
- 根据对 XML 模式类型 xs:hexBinary 编码的定义,指定采用编码为十六进制字符。 十六进制编码用两个十六进制字符表示每个字节(8位)。 使用此方法时,编码数据的大小是原始二进制数据或位数据的两倍。
XMLFOREST函数可以用XMLCONCAT和XMLELEMENT函数来表示。
此函数接受一组可选的命名空间声明和一个或多个参数,这些参数构成一个或多个元素节点的名称和元素内容。 结果是一个包含元素节点序列或空值的XML序列。
函数的输出结果是一个XML值。 结果可以为空;如果所有元素-内容-表达式参数都为空,并且“空值覆盖空值”选项生效,则结果为空值。
示例 :在 EMP 示例表中,为 1980 年或之后雇用的每位员工生成一个 Emp 元素。 将列FIRSTNME和LASTNAME的值串联起来,形成Emp元素的名称属性。 使用XMLFOREST创建Emp元素的两个嵌套元素:Hiredate元素和Department元素。 Hiredate元素值是HIREDATE列的值。 部门元素值是WORKDEPT列的值。
SELECT e.EMPNO AS "ID",
XMLSERIALIZE(
XMLELEMENT(
NAME "Emp",
XMLATTRIBUTES(e.FIRSTNME || ' ' || e.LASTNAME AS "Name"),
XMLFOREST(e.HIREDATE AS "Hiredate",e.WORKDEPT AS "Department"))
AS CLOB(100))
AS "Result"
FROM EMP e
WHERE YEAR(HIREDATE)>='1980';

查询返回的结果如下:ID Result
------------------------------------------
000070 <Emp Name="EVA PULASKI">
<Hiredate>1980-09-30</Hiredate>
<Department>D21</Department>
</Emp>
000100 <Emp Name="THEODORE SPENSER">
<Hiredate>1980-06-19</Hiredate>
<Department>E21</Department>
</Emp>
000270 <Emp Name="MARIA PEREZ">
<Hiredate>1980-09-30</Hiredate>
<Department>D21</Department>
</Emp>
000290 <Emp Name="JOHN PARKER">
<Hiredate>1980-05-30</Hiredate>
<Department>E11</Department>
</Emp>
