FOR 函数

FOR 字段函数对表达式求值并指定 TRUE、FALSE 或 UNKNOWN 等结果值。

语法

FOR 函数可用于编写迭代重复字段所有实例的表达式。对于每个实例,它处理一个布尔值表达式并整理结果。

例如:
FOR ALL Body.Invoice.Purchases."Item"[] AS I (I.Quantity <= 50)
注:
  1. 使用定量谓词时,首先要注意的是 FOR ALL 后面字段引用结束处的 []。此方括号定义对 Item 字段所有实例的迭代。

    有时此语法好像不必要,因为可以从上下文获取此项信息,但执行它有助于与其他语法部分保持一致。

  2. ASclause 将字段引用中的名称 I 与重复字段的当前实例关联在一起。这类似于某些面向对象的语言(例如,C++)中使用的迭代器类概念。括号中的表达式是谓词,需要为 Item 字段的每个实例对其进行求值。

如果指定 ALL 关键字,FOR 函数将迭代 Body.Invoice.Purchases 内 Item 字段的所有实例,并对谓词 I.Quantity <= 50 进行求值。如果此谓词的求值结果为:
  • TRUE(如果 Item 字段为空,或者为所有 Item 实例求值,则返回 TRUE)。
  • FALSE(对于 Item 的任何实例,均返回 FALSE)。
  • 对于任何其他情况,返回 UNKNOWN。
ANYSOME 关键字是等价的。不管使用哪一个,FOR 函数都会迭代 Body.Invoice.Purchases 内 Item 字段的所有实例,并对谓词 I.Quantity <= 50 进行求值。如果此谓词的求值结果为:
  • FALSE(如果 Item 字段为空或对 Item 的所有实例进行求值,则返回 FALSE)。
  • TRUE(对于 Item 的任何实例,均返回 TRUE)。
  • 对于任何其他情况,返回 UNKNOWN。
为了进一步说明问题,提供了下面的示例,它们基于示例消息中描述的消息。在下面的过滤器表达式中:
FOR ANY Body.Invoice.Purchases."Item"[] AS I (I.Title = 'The XML Companion')
子谓词的求值结果是 TRUE。但下一个表达式返回 FALSE:
FOR ANY Body.Invoice.Purchases."Item"[] AS I (I.Title = 'C Primer')
因为该发票中不包含 C Primer。如果在该实例中,发票中的某些项不包含书籍标题字段,子谓词将返回 UNKNOWN,定量谓词也返回值 UNKNOWN。
请小心处理可能出现空值的情况。编写此过滤器时请加入对字段存在与否的显式检查,如下所示:
FOR ANY Body.Invoice.Purchases."Item"[] AS I (I.Book IS NOT NULL AND
I.Book.Title = 'C Primer')
IS NOT NULL 谓词确保如果 Item 字段不包含 Book,则从子谓词返回 FALSE 值。
相关概念
ESQL 概述
相关任务
正在开发 ESQL
访问元素的未知的多次出现
相关参考
语法图:可用类型
示例消息
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ak18490_