Vergleiche mit ROW und LIST

Sie können ROWs und LISTs mit anderen ROWs und LISTs 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 ...
Für eine XML-Eingabenachricht mit folgendem Hauptteil führen beide IF-Ausdrücke in beiden oben genannten Anweisungen zu dem Ergebnis TRUE:
<Data>
<Name>Raf</Name>
<Age>25</Age>
</Data>
Bei Vergleichen zwischen ROWs werden sowohl der Name als auch der Wert jedes Elements verglichen; bei Vergleichen zwischen LISTs wird nur der Wert jedes Elements verglichen. In beiden Fällen müssen Kardinalität und Reihenfolge der zu vergleichenden LIST- bzw. ROW-Operanden gleich sein, damit die beiden Operanden gleich sind. Das heißt, alle folgenden Anweisungen sind falsch, weil entweder die Reihenfolge oder die Kardinalität der zu vergleichenden Operanden nicht übereinstimmen:
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

Betrachten Sie folgende ESQL-Anweisung:
IF InputBody.Places =
ROW('Ken' AS first, 'Bob' AS second, 'Kate' AS third) THEN ...
Für eine XML-Eingabenachricht mit folgendem Hauptteil führt der oben genannte IF-Ausdruck zu dem Ergebnis TRUE:
<Places>
<first>Ken</first>
<second>Bob</second>
<third>Kate</third>
</Places>

Das Vorhandensein einer explizit konstruierten ROW-Anweisung als einer der Operanden des Vergleichsoperators hat zur Folge, dass der andere Operand ebenfalls wie eine ROW-Anweisung behandelt wird.

Betrachten Sie im Gegensatz dazu den folgenden Vergleich:
IF InputBody.Lottery.FirstDraw = InputBody.Lottery.SecondDraw THEN ...
Hier wird der Wert der Felder FirstDraw und SecondDraw verglichen, nicht die Namen und Werte aller untergeordneten Felder von FirstDraw und SecondDraw, die als ROW konstruiert sind. Für eine XML-Eingabenachricht mit dem Hauptteil
<Lottery>
<FirstDraw>wednesday
<ball1>32</ball1>
<ball2>12</ball2>
</FirstDraw>
<SecondDraw>saturday
<ball1>32</ball1>
<ball2>12</ball2>
</SecondDraw>
</Lottery>
bedeutet dies, dass der oben genannte IF-Ausdruck nicht zu dem Ergebnis TRUE führt, weil die Werte 'wednesday' und 'saturday' verglichen werden, nicht die Namen und Werte der 'ball'-Felder.

Beispiel 3

Betrachten Sie folgende ESQL-Anweisung:
IF InputBody.Cities.City[] = LIST{'Athens','Sparta','Thebes'} THEN ...
Für eine XML-Eingabenachricht mit folgendem Hauptteil führt der IF-Ausdruck zu dem Ergebnis TRUE:
<Cities>
<City>Athens</City>
<City>Sparta</City>
<City>Thebes</City>
</Cities>
Auf diese Weise können zwei Nachrichtenfeldgruppen miteinander verglichen werden, zum 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: 18.05.2006
ak05660_