XMLFOREST 标量函数 (scalar function)

XMLFOREST函数返回一个XML值,该值是XML元素节点的序列。

阅读语法图跳过可视化语法图XMLFOREST(xmlnamespace-function,,元素-内容-表达ASelement-nameOPTION1EMPTY ON NULLNULL ON NULLXMLBINARYUSINGBASE64XMLBINARYUSINGHEX2)
注意:
  • 1 只有在至少指定了一个xmlattributes-functionelement-content-expression 时,才能指定OPTION子句。
  • 2 同一条款不得重复出现。

该模式是 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>
更改结束