XMLEXISTS 谓词
XMLEXISTS 谓词测试 XQuery 表达式是否返回一个或多个项的序列。
Notes:
- 1 The data type cannot be DECFLOAT.
- 2 The data type of the expression cannot be DECFLOAT.
- XQuery表达式常量
- 指定一个解释为 XQuery 表达式的 SQL 字符串常量。 该常量字符串将直接转换为 UTF-8,而不转换为数据库或节代码页。 XQuery 表达式使用一组可选的输入 XML 值执行,并返回经过测试以确定 XMLEXISTS 谓词的结果的输出序列。 xquery-expression-constant 的值不能是空字符串或空白字符串 (SQLSTATE 10505)。
- PASSING
- 指定输入值以及这些值传递至
xquery-expression-constant 所指定的 XQuery 表达式的方式。 缺省情况下,通过使用列名作为变量名,将调用函数时所在作用域中的每个唯一列名隐式传递至 XQuery 表达式。 如果指定的 xquery-argument 中的 identifier 与范围内的列名匹配,那么显式 xquery-argument 将传递给覆盖该隐式列的 XQuery 表达式。
- BY REF
- 指定缺省传递机制供数据类型为 XML 的任何 xquery-variable-expression 引用。 当通过引用传递 XML 值时,XQuery 求值将直接从指定的输入表达式中使用输入节点树(如果有),这将保留所有属性,包括原始节点标识和文档顺序。 如果两个参数传递相同的 XML 值,并且节点标识比较和文档顺序比较涉及这两个输入参数之间包含的某些节点,那么这两种比较可能引用相同 XML 节点树中的节点。
此子句不影响非 XML 值的传递方式。 非 XML 值在强制转换为 XML 期间将创建值的新副本。
- xquery-argument
- 指定将传递至 row-xquery-expression-constant 所指定的 XQuery 表达式的参数。 在 XQuery 表达式中使用 row-xquery-argument 的方法取决于该自变量已指定为 xquery-context-item-expression 还是 xquery-variable-expression。
- 如果生成值的类型是 XML,那么它将变成 input-xml-value。 空 XML 值将转换为 XML 空序列。
- 如果生成值的类型不是 XML,那么它必须可强制转换为 XML 数据类型。 空值将转换为 XML 空序列。 转换后的值将变成 input-xml-value。
- XQuery上下文项表达式
- xquery-context-item-expression 指定 xquery-expression-constant 所指定的 XQuery 表达式中的初始上下文项。 初始上下文项的值是 xquery-context-item-expression 强制转换为 XML 后的结果。 不得多次指定 xquery-context-item-expression。 XQuery 变量表达式
- 指定一个 SQL 表达式,其值在执行期间可供 xquery-expression-constant 所指定的 XQuery 表达式使用。 该表达式不能包含序列引用 (SQLSTATE 428F9) 或 OLAP 函数 (SQLSTATE 42903)。 该表达式的数据类型不能是 DECFLOAT。
- AS 标识
- 指定 xquery-variable-expression 所生成的值将作为 XQuery 变量传递至 xquery-expression-constant。 该变量名将为 identifier。 XQuery 语言中的变量名前面的前导美元符号 ($) 不包括在 identifier 中。 标识必须是有效的 XQuery 变量名,并且限于 XML NCName。 标识的长度不能超过 128 个字节。 同一 PASSING 子句中的两个参数不能使用相同的标识 (SQLSTATE 42711)。
- BY REF
- 指示将通过引用传递 XML 输入值。 当通过引用传递 XML 值时,XQuery 求值将直接从指定的输入表达式中使用输入节点树(如果有),这将保留所有属性,包括原始节点标识和文档顺序。 如果两个参数传递相同的 XML 值,并且节点标识比较和文档顺序比较涉及这两个输入参数之间包含的某些节点,那么这两种比较可能引用相同 XML 节点树中的节点。 如果在 xquery-variable-expression 后面未指定 BY REF,那么将使用 PASSING 关键字后面的语法所提供的缺省传递机制传递 XML 参数。 不能对非 XML 值指定此选项。 传递非 XML 值时,该值将转换为 XML;此过程会创建副本。
注意
XMLEXISTS 谓词不能是:
- 与 JOIN 运算符相关联的 ON 子句或 MERGE 语句的一部分 (SQLSTATE 42972)
- CREATE INDEX EXTENSION 语句中的 GENERATE KEY USING 或 RANGE THROUGH 子句的一部分 (SQLSTATE 428E3)
- CREATE FUNCTION(外部标量)语句中的 FILTER USING 子句或 CREATE INDEX EXTENSION 语句中的 FILTER USING 子句的一部分 (SQLSTATE 428E4)
- 检查约束或列生成表达式的一部分 (SQLSTATE 42621)
- group-by 子句的一部分 (SQLSTATE 42822)
- 聚集函数的部分自变量 (SQLSTATE 42607)
涉及子查询的 XMLEXISTS 谓词可能受限制子查询的语句限制。
示例
SELECT c.cid FROM customer c
WHERE XMLEXISTS('$d/*:customerinfo/*:addr[ *:city = "Aurora" ]'
PASSING info AS "d")