什么是ESQL COALESCE函数的XQuery等价物?

Ala*_*hem 4 sql xquery ibm-integration-bus extended-sql

我正在尝试将WMB 7映射节点转换为IIB 9节点.自动转换过程将一些ESQL函数转换为XQuery函数.

具体来说,它改变了ESQL功能

COALESCE (var0, var1) 
Run Code Online (Sandbox Code Playgroud)

(返回第一个非空值,如if var0 = null then var1 else var0)

XQUERY (var0,var1)
Run Code Online (Sandbox Code Playgroud)
  1. 这是正确的转换吗?

  2. 如果是,有人可以提供API的链接吗?我在XQuery语法和操作员手册上找不到这个.

Abe*_*bel 6

XQuery不是API,而是标准,可以在线找到完整的语法:XQuery 1.0XQuery 3.0(没有2.0).您还会找到许多手册,教程等.

XQuery依赖于XPath,它比XQuery更广泛使用,并且可以在库中找到几乎所有通用语言.

你的表达式是正确的XQuery,因为它将所有内容都视为序列,并且逗号连接(并展平)两个序列.

XPath不知道NULL,但它知道xsi:nil(),后者是空序列.从结果中删除空序列.

我不确定下面使用了什么XQuery处理器,但正确的表达式应该是($var0, $var1)[1]2,其工作方式与COALESCE操作1相同.在XPath和XQuery中,变量用$符号引用.由逗号分隔的变量或表达式的数量是无限的.如果all都是空序列(null),则结果为空序列.

如果没有[1],它将返回所有非空的项并丢弃其余项.您可以使用另一个索引,比如[3]获取第三个非null值.如果不存在此值,则返回null(空序列).


1的 行为与你描述的不完全相同.我相信它的行为就像if var0 == null then var1 else var0,它选择了第一个非空值(我已经更新了OP).

2 正如弗洛朗在评论中所解释的那样,这个表达的警告已经到位.如果你有$var1 := (1, 2)$var2 := (3, 4),表达式$var1, $var2)[1]将返回1,而不是(1, 2)因为序列不能包含子序列,并且索引序列[x]将返回展平序列的 x 值.你可以安全地保护你的表达(zero-or-one($var1), zero-or-one($var2))[1].