XMLFOREST

XMLFOREST 函数返回作为 XML 元素序列的 XML 值。

读取语法图跳过可视语法图XMLFOREST( xmlnamespaces-declaration, ,元素-内容-表达式AS元素名称 OPTIONNULL ON NULLEMPTY ON NULLXMLBINARYUSINGBASE64XMLBINARYUSINGHEX1 )
注:
  • 1 不能多次指定同一子句。
xmlnamespace-声明
指定作为 XMLNAMESPACES 声明结果的 XML 名称空间声明。 声明的名称空间在 XMLFOREST 函数作用域中。 不管是否出现在另一子查询中,这些名称空间都适用于 XMLFOREST 函数内的任何嵌套 XML 函数。 有关声明 XML 名称空间的更多信息,请参阅 XMLNAMESPACES
如果未指定 xmlnamespace-声明 ,那么名称空间声明不会与构造的 XML 元素相关联。
element-content-expression
指定用于返回用于所生成 XML 元素的内容的值的表达式。 表达式的数据类型不得为 ROWID 或 DATALINK。 如果表达式不是简单列引用,那么必须指定 element-name
AS 元素名称
指定用于 XML 元素名称的标识。
XML 元素名称必须是 XML 限定名或 QName。 请参阅 W3C XML 名称空间规范以了解有关有效名称的更多详细信息。 如果名称是限定的,那么必须在作用域中声明名称空间前缀。
如果未指定 element-name ,那么 element-content-expression 必须是列名。 使用从列名到 QName 的完全转义映射从列名创建元素名称。
选项
指定 NULL 值,二进制数据和位数据的结果选项。 element-content-expression中显示的 XMLELEMENT 或 XMLFOREST 函数不会继承这些选项。
NULL ON NULL 或 EMPTY ON NULL
指定如果每个 element-content-expression 的值都是空值,那么是返回空值还是返回空元素。 此选项仅影响 element-content-expression 自变量的空处理。 缺省值为 NULL ON NULL。
NULL ON NULL
如果每个 element-content-expression 的值为空,那么将返回空值。
EMPTY ON NULL
如果每个 element-content-expression 的值为空,那么将返回空元素。
XMLBINARY USING BASE64 或 XMLBINARY USING HEX
指定二进制输入数据,具有 FOR BIT DATA 属性的字符串数据, ROWID 或基于其中一种类型的单值类型的假定编码。 该编码适用于元素内容或属性值。 缺省值为 XMLBINARY USING BASE64。
XMLBINARY USING BASE64
根据对 XML 模式类型 xs:base64Binary 编码的定义,指定采用编码为基本 64 位字符。 基本 64 位代码使用 US-ASCII 的由 65 个字符组成的子集(10 个数字、26 个小写字符、26个大写字符以及“+”和“/”)来表示每个二进制数据或位数据的 6 位以及子集中的一个可打印字符。 这些字符已被选中,所以它们是以可通用的方式表示的。 使用此方法时,编码数据的大小比原始二进制数据或位数据大 33%。
XMLBINARY USING HEX
根据对 XML 模式类型 xs:hexBinary 编码的定义,指定采用编码为十六进制字符。 十六进制编码使用两个十六进制字符来表示每个字节(8 位)。 使用此方法时,编码数据的大小是原始二进制数据或位数据的两倍。

此函数的结果是 XML 值。 如果任何 element-content-expression 的结果可以为空,那么结果可以为空; 如果每个 element-content-expression 的结果为空且 NULL ON NULL 选项生效,那么结果为空值。

XMLFOREST 函数可使用 XMLCONCAT 和 XMLELEMENT 来表示。 例如,下列两个表达式在语义上是等价的。

XMLFOREST(xmlnamespaces-declaration, arg1 AS name1, arg2 AS name2, ...)

XMLCONCAT(XMLELEMENT(NAME name1, xmlnamespaces-declaration, arg1),
          XMLELEMENT(NAME name2, xmlnamespaces-declaration, arg2),
 ... )

构造将作为另一元素(用于定义缺省名称空间)的内容进行复制的元素时,应在被复制元素中显式取消声明缺省名称空间,以避免因为从新的父代元素继承缺省名称空间而可能导致的错误。 使用预定义的名称空间前缀 ("xs" , "xsi" , "xml" 和 "sqlxml") 时也必须显式声明。

示例

注: XMLFOREST 不会在输出中插入空格或换行符。 所有示例输出都将格式化以增强可读性。
  • 使用缺省名称空间构造元素群。
    SELECT EMPNO,
           XMLFOREST(XMLNAMESPACES(DEFAULT 'http://hr.org', 
                                   'http://fed.gov' AS "d"),
                     LASTNAME, JOB AS "d:job") AS "Result"
    FROM EMPLOYEE WHERE EDLEVEL = 12  

    此查询将生成以下结果:

    EMPNO  Result
    000290 <LASTNAME xmlns:"http://hr.org" xmlns:d="http://fed.gov">PARKER
           </LASTNAME>
           <d:job xmlns:"http://hr.org" xmlns:d="http://fed.gov">OPERATOR</d:job>
    000310 <LASTNAME xmlns:"http://hr.org" xmlns:d="http://fed.gov">SETRIGHT
           </LASTNAME>
           <d:job xmlns:"http://hr.org" xmlns:d="http://fed.gov">OPERATOR</d:job>
    200310 <LASTNAME xmlns:"http://hr.org" xmlns:d="http://fed.gov">SPRINGER
           </LASTNAME>
           <d:job xmlns:"http://hr.org" xmlns:d="http://fed.gov">OPERATOR</d:job>