Confronti tra ROW e LIST

E' possibile confrontare ROW e LIST con altre ROW e LIST.

Esempi

Esempio 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 ...
Con il seguente contenuto del messaggio di input XML, le espressioni IF nelle istruzioni sopra riportate sono entrambe TRUE:
<Data>
   <Name>Raf</Name>
   <Age>25</Age>
</Data>
Nel confronto tra ROW, vengono confrontati il nome ed il valore di ciascun elemento; nel confronto tra LIST viene confrontato solo il valore di ciascun elemento. In entrambi i casi, la cardinalità e l'ordine sequenziale degli operandi LIST o ROW confrontati deve essere uguale affinché i due operandi siano uguali. In altre parole, tutte le seguenti istruzioni sono false, perchè l'ordine sequenziale o la cardinalità degli operandi confrontati non corrispondono:
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}

Esempio 2

Considerare il seguente codice ESQL:
IF InputBody.Places =
   ROW('Ken' AS first, 'Bob' AS second, 'Kate' AS third) THEN ...
Con il seguente contenuto del messaggio di input XML, il risultato dell'espressione IF precedente è TRUE:
<Places>
   <first>Ken</first>
   <second>Bob</second>
   <third>Kate</third>
</Places>

La presenza di una ROW costruita in modo esplicito come uno degli operandi dell'operatore di confronto determina che anche l'altro operando venga considerato come ROW.

Confrontare quanto riportato in precedenza con un confronto come:
IF InputBody.Lottery.FirstDraw = InputBody.Lottery.SecondDraw THEN ...
che confronta il valore dei campi FirstDraw e SecondDraw, non i nomi ed i valori di ciascuno dei campi child di FirstDraw e SecondDraw costruiti come ROW. Quindi, il contenuto del messaggio di input XML:
<Lottery>
   <FirstDraw>wednesday
      <ball1>32</ball1>
      <ball2>12</ball2>
   </FirstDraw>
   <SecondDraw>saturday
      <ball1>32</ball1>
      <ball2>12</ball2>
   </SecondDraw>
</Lottery>
non ha come risultato TRUE per l'espressione IF sopra riportata, perchè vengono confrontati i valori wednesday e saturday, non i nomi ed i valori dei campi ball.

Esempio 3

Considerare il seguente codice ESQL:
IF InputBody.Cities.City[] = LIST{'Athens','Sparta','Thebes'} THEN ...
Con il seguente contenuto del messaggio di input XML, l'espressione IF è TRUE:
<Cities>
	<City>Athens</City>
	<City>Sparta</City>
	<City>Thebes</City>
</Cities>
In questo modo è possibile confrontare due array del campo di messaggi, ad esempio:
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 ...
Con il seguente contenuto del messaggio di input XML, le espressioni IF della prima e terza istruzione sopra riportate sono entrambe TRUE:
<Cities>
   <Mediaeval>1350
      <City>London</City>
      <City>Paris</City>
   </Mediaeval>
   <Modern>1990
      <City>London</City>
      <City>Paris</City>
   </Modern>
</Cities>
Tuttavia, l'espressione IF della seconda istruzione è FALSE, perché *[] indica che devono essere confrontati tutti i child di Mediaeval e Modern, non solo (XML.Element). In questo caso, i valori 1350 e 1990, che sono child senza nome di Mediaeval e Modern, vengono confrontati così come i valori di City.
L'espressione IF della terza istruzione è TRUE con un contenuto del messaggio di input XML come:
<Cities>
   <Mediaeval>1350
      <Location>London</Location>
      <Location>Paris</Location>
   </Mediaeval>
   <Modern>1990
      <City>London</City>
      <City>Paris</City>
   </Modern>
</Cities>
Le LIST sono composte da valori senza nomi. Vengono confrontati i valori dei campi child di Mediaeval e Modern e non i relativi nomi.
Concetti correlati
Panoramica di ESQL
Attività correlate
Sviluppo di ESQL
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ak05660_