ROW- und LIST-Vergleiche

Sie können Zeilen (ROW) und Listen (LIST) mit anderen Zeilen und Listen vergleichen.

Beispiele

Beispiel 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 ...
Mit dem folgenden Hauptteil der XML-Eingabenachricht ergeben beide IF-Ausdrücke in beiden obigen Anweisungen den Wert TRUE:
<Data>
   <Name>Raf</Name>
   <Age>25</Age>
</Data>
Bei dem Vergleich von Zeilen werden die Namen und die Werte der einzelnen Elemente verglichen, während bei dem Vergleich von Listen nur die Werte der einzelnen Elemente verglichen werden. In beiden Fällen müssen die Kardinalität und die Reihenfolge der LIST- oder ROW-Operanden, die verglichen werden, identisch sein, damit die beiden Operanden identisch sind. In allen folgenden Beispielen ist dies nicht der Fall, da entweder die Reihenfolge oder die Kardinalität der Operanden, die verglichen werden, nicht übereinstimmt:
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}

Beispiel 2

Sehen Sie sich folgenden ESQL-Code an:
IF InputBody.Places =
   ROW('Ken' AS first, 'Bob' AS second, 'Kate' AS third) THEN ...
Mit dem folgenden Hauptteil der XML-Eingabenachricht ergibt der obige IF-Ausdruck den Wert TRUE:
<Places>
   <first>Ken</first>
   <second>Bob</second>
   <third>Kate</third>
</Places>

Wenn einer der Operanden des Vergleichsoperators eine explizit konstruierte Zeile (ROW) ist, wird der andere Operand ebenfalls als Zeile behandelt.

Sehen Sie sich im Gegensatz dazu folgenden Vergleich an:
IF InputBody.Lottery.FirstDraw = InputBody.Lottery.SecondDraw THEN ...
Hier werden die Werte der Felder 'FirstDraw' und 'SecondDraw' verglichen, nicht die Namen und Werte der einzelnen untergeordneten Felder von 'FirstDraw' und 'SecondDraw', die als Zeile konstruiert sind. Deshalb würde folgender Hauptteil einer XML-Eingabenachricht:
<Lottery>
   <FirstDraw>wednesday
      <ball1>32</ball1>
      <ball2>12</ball2>
   </FirstDraw>
   <SecondDraw>saturday
      <ball1>32</ball1>
      <ball2>12</ball2>
   </SecondDraw>
</Lottery>
nicht den obigen IF-Ausdruck mit dem Ergebnis TRUE ergeben, da die Werte 'wednesday' und 'saturday' verglichen werden und nicht die Namen und Werte der 'ball'-Felder.

Beispiel 3

Sehen Sie sich folgenden ESQL-Code an:
IF InputBody.Cities.City[] = LIST{'Athens','Sparta','Thebes'} THEN ...
Mit dem folgenden Hauptteil der XML-Eingabenachricht ergibt der IF-Ausdruck den Wert TRUE:
<Cities>
<City>Athens</City>
<City>Sparta</City>
<City>Thebes</City>
</Cities>
Auf diese Weise können zwei Nachrichtenfeldgruppen miteinander verglichen werden. Beispiel:
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 ...
Für eine XML-Eingabenachricht mit folgendem Hauptteil führt der IF-Ausdruck der ersten und dritten Anweisung zu dem Ergebnis TRUE:
<Cities>
   <Mediaeval>1350
      <City>London</City>
      <City>Paris</City>
   </Mediaeval>
   <Modern>1990
      <City>London</City>
      <City>Paris</City>
   </Modern>
</Cities>
Der IF-Ausdruck der zweiten Anweisung führt jedoch zu dem Ergebnis FALSE, weil *[] bedeutet, dass alle untergeordneten Elemente von 'Mediaeval' und 'Modern' verglichen werden sollen, nicht nur die (XML.Element)-Elemente. In diesem Fall werden die Werte '1350' und '1990', bei denen es sich um nicht benannte, untergeordnete Elemente von 'Mediaeval' und 'Modern' handelt, ebenso verglichen wie die Werte der 'City'-Tags.
Der IF-Ausdruck der dritten Anweisung führt zu dem Ergebnis TRUE, wenn eine XML-Eingabenachricht folgenden Hauptteil hat:
<Cities>
   <Mediaeval>1350
      <Location>London</Location>
      <Location>Paris</Location>
   </Mediaeval>
   <Modern>1990
      <City>London</City>
      <City>Paris</City>
   </Modern>
</Cities>
LISTs werden aus nicht benannten Werten erstellt. Es werden die Werte der untergeordneten Felder von 'Mediaeval' und 'Modern' verglichen, nicht deren Namen.
Zugehörige Konzepte
Übersicht zu ESQL
Zugehörige Tasks
ESQL erstellen
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
ak05660_