ROW 和 LIST 比较

您可以将 ROW 和 LIST 与其他 ROW 和 LIST 作比较。

示例

示例 1

IF ROW(InputBody.Data.*[1],InputBody.Data.*[2]) =
                                  ROW('Raf' AS Name,'25' AS Age) THEN ...
IF LIST{InputBody.Data.Name, InputBody.Data.Age} = LIST{'Raf','25'} THEN ...
下列 XML 输入消息主体将使上述两个语句中的 IF 表达式的求值结果为 TRUE:
<Data>
   <Name>Raf</Name>
   <Age>25</Age>
</Data>
在 ROW 之间比较时,会比较每个元素的名称和值;但在 LIST 之间比较时,只比较每个元素的值。在这两种情况下,被比较的 LIST 或 ROW 操作数的基数和顺序必须相等,以便使两个操作数相等。换句话说,下列都为假,因为比较的操作数顺序或基数不匹配:
ROW('alpha' AS A, 'beta' AS B) =
                          ROW('alpha' AS A, 'beta' AS B, 'delta' AS D)
ROW('alpha' AS A, 'beta' AS B) =
                          ROW('beta' AS B,'alpha' AS A)
LIST{1,2,3} = LIST{1,2,3,4}
LIST{3,2,1} = LIST{1,2,3}

示例 2

请参阅下列 ESQL:
IF InputBody.Places =
      ROW('Ken' AS first, 'Bob' AS second, 'Kate' AS third) THEN ...
下列 XML 输入消息主体使上述 IF 表达式的求值结果为 TRUE:
<Places>
   <first>Ken</first>
   <second>Bob</second>
   <third>Kate</third>
</Places>

显式构造的 ROW 的存在作为对比较运算符的操作数之一,导致其他操作数也视为一个 ROW。

这与比较进行对比,例如:
IF InputBody.Lottery.FirstDraw = InputBody.Lottery.SecondDraw THEN ...
其比较 FirstDraw 和 SecondDraw 字段的值,而不是每个 FirstDraw 和 SecondDraw 子字段的名称和值构造成的一个 ROW。因此 XML 输入消息主体,如:
<Lottery>
   <FirstDraw>wednesday
      <ball1>32</ball1>
      <ball2>12</ball2>
   </FirstDraw>
   <SecondDraw>saturday
      <ball1>32</ball1>
      <ball2>12</ball2>
   </SecondDraw>
</Lottery>
将不会导致上述 IF 表达式的求值结果为 TRUE,因为正在比较值“wednesday”和“saturday”,而不是 ball 字段的名称和值。

示例 3

请参阅下列 ESQL:
IF InputBody.Cities.City[] = LIST{'Athens','Sparta','Thebes'} THEN ...
下列 XML 输入消息主体使 IF 表达式的求值结果为 TRUE:
<Cities>
<City>Athens</City>
<City>Sparta</City>
<City>Thebes</City>
</Cities>
两个消息字段数组可以按此方法一起比较,例如:
IF InputBody.Cities.Mediaeval.City[] = 
                                        InputBody.Cities.Modern.City[] THEN ...

IF InputBody.Cities.Mediaeval.*[] = InputBody.Cities.Modern.*[] THEN ...

IF InputBody.Cities.Mediaeval.(XML.Element)[] = 
                                        InputBody.Cities.Modern.(XML.Element)[] THEN ...
下列 XML 输入消息主体使上述第一个和第三个语句的 IF 表达式求值为 TRUE:
<Cities>
   <Mediaeval>1350
      <City>London</City>
      <City>Paris</City>
   </Mediaeval>
   <Modern>1990
      <City>London</City>
      <City>Paris</City>
   </Modern>
</Cities>
但是,第二个语句的 IF 表达式将求值为 FALSE,因为 *[] 表明将比较 Mediaeval 和 Modern 的所有子代,而不只是 (XML.Element)。在这种情况下,比较值 1350 和 1990(它们形成 Mediaeval 和 Modern 的无名子代)以及 City 标记的值。
上述第三个语句的 IF 表达式的求值结果将是 TRUE,它有 XML 输入消息主体,如:
<Cities>
   <Mediaeval>1350
      <Location>London</Location>
      <Location>Paris</Location>
   </Mediaeval>
   <Modern>1990
      <City>London</City>
      <City>Paris</City>
   </Modern>
</Cities>
LIST 由未命名的值组成。它是作比较的 Mediaeval 和 Modern 的子字段值,而不是它们的名称。
相关概念
ESQL 概述
相关任务
正在开发 ESQL
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ak05660_