条件表达式

条件表达式使用关键字 ifthenelse 以根据测试表达式的值是 true 还是 false 来对两个表达式的其中一个求值。

语法

Read syntax diagramSkip visual syntax diagramif(TestExpression)thenExpressionelseExpression
购买
直接放在测试表达式之前的关键字。
TestExpression
确定对哪部分条件表达式求值的 XQuery 表达式。
then
如果 TestExpression 的有效布尔值为 true,那么会对跟在此关键字之后的表达式求值。 如果测试表达式的有效布尔值为 false,那么不会对表达式求值或检查是否有错。
else
如果 TestExpression 的有效布尔值为 false,那么会对跟在此关键字之后的表达式求值。 如果测试表达式的有效布尔值为 true,那么不会对表达式求值或检查是否有错。
表达式
XQuery 表达式。 如果表达式包含顶级逗号运算符,那么必须用圆括号将表达式括起来。
如果 thenelse 条件分支包含更新表达式,那么条件表达式为更新表达式。 更新表达式必须在变换表达式的 modify 子句中。
对于更新条件表达式,每个分支必须包含更新表达式或空序列。 根据测试表达式的值,将选择 thenelse 子句或对其求值。 条件更新表达式将生成所选分支返回的更新列表。 在将更新与变换表达式的 modify 子句中的其他更新表达式返回的更新合并后,外层变换表达式会执行更新。

示例

在以下示例中,查询会构造包含属性 basicproduct 元素的列表。 basic 属性的值是根据 price 元素的值是否小于 10 这一条件指定的:
for $prod in db2-fn:xmlcolumn('PRODUCT.DESCRIPTION')/product/description
return (
if (xs:decimal($prod/price) < 10)
  then <product basic = "true">{fn:data($prod/name)}</product>
  else <product basic = "false">{fn:data($prod/name)}</product>)
查询将返回以下结果:
<product basic="true">Snow Shovel, Basic 22"</product>
<product basic="false">Snow Shovel, Deluxe 24"</product>
<product basic="false">Snow Shovel, Super Deluxe 26"</product>
<product basic="true">Ice Scraper, Windshield 4" Wide</product>
在此示例中,测试表达式根据 price 元素的值构造 xs:decimal 值。 xs:decimal 函数用于强制进行十进制比较。