ROW y LIST comparados

Puede comparar ROW y LIST con otros ROW y LIST.

Ejemplos

Ejemplo 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 el texto del mensaje de entrada XML siguiente las dos expresiones IF de las dos sentencias anteriores se evalúan como TRUE:
<Data>
   <Name>Raf</Name>
   <Age>25</Age>
</Data>
En las comparaciones entre ROW, se comparan tanto el nombre como el valor de cada elemento. En las comparaciones entre LIST solamente se compara el valor de cada elemento. En ambos casos, la cardinalidad y el orden secuencial de los operandos LIST o ROW que se están comparando deben tener el mismo orden para que los dos operandos sean iguales. En otras palabras, el valor de todos los siguientes es false porque o bien el orden secuencial o bien la cardinalidad de los operandos que se están comparando no coincide.
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}

Ejemplo 2

Observe el ESQL siguiente:
IF InputBody.Places =
   ROW('Ken' AS first, 'Bob' AS second, 'Kate' AS third) THEN ...
Con el texto de mensaje de entrada XML siguiente, la expresión IF anterior se evalúa como TRUE:
<Places>
   <first>Ken</first>
   <second>Bob</second>
   <third>Kate</third>
</Places>

La presencia de ROW creado de forma explícita como uno de los operandos del operador de comparación da como resultado que el otro operando se trate como ROW.

Compárelo con una comparación como, por ejemplo:
IF InputBody.Lottery.FirstDraw = InputBody.Lottery.SecondDraw THEN ...
lo cual compara el valor de los campos FirstDraw y SecondDraw y no los nombres y los valores de cada uno de los campos hijo FirstDraw y SecondDraw creados como ROW. De este modo, un texto de mensaje de entrada XML como, por ejemplo:
<Lottery>
   <FirstDraw>wednesday
      <ball1>32</ball1>
      <ball2>12</ball2>
   </FirstDraw>
   <SecondDraw>saturday
      <ball1>32</ball1>
      <ball2>12</ball2>
   </SecondDraw>
</Lottery>
no hará que la expresión IF anterior se evalúe como TRUE, debido a que se están comparando los valores wednesday y saturday y no los nombres y valores de los campos ball.

Ejemplo 3

Observe el ESQL siguiente:
IF InputBody.Cities.City[] = LIST{'Athens','Sparta','Thebes'} THEN ...
Con el texto de mensaje de entrada XML siguiente, la expresión IF anterior se evalúa como TRUE:
<Cities>
<City>Athens</City>
<City>Sparta</City>
<City>Thebes</City>
</Cities>
Se pueden comparar dos matrices de campos de mensaje de este modo, por ejemplo:
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 el texto de mensaje de entrada XML siguiente, la expresión IF anterior de la primera y tercera sentencia se evalúa como TRUE:
<Cities>
   <Mediaeval>1350
      <City>London</City>
      <City>Paris</City>
   </Mediaeval>
   <Modern>1990
      <City>London</City>
      <City>Paris</City>
   </Modern>
</Cities>
No obstante, la expresión IF de la segunda sentencia se evalúa como FALSE, debido a que con *[] se indica que todos los hijos de Mediaeval y Modern se deben comparar y no simplemente (XML.Element). En este caso, los valores 1350 y 1990, que forman hijos sin nombre de Mediaeval y Modern, se comparan también como los valores de los códigos City.
La expresión IF de la tercera sentencia se evalúa como TRUE con un texto de mensaje de entrada XML como, por ejemplo:
<Cities>
   <Mediaeval>1350
      <Location>London</Location>
      <Location>Paris</Location>
   </Mediaeval>
   <Modern>1990
      <City>London</City>
      <City>Paris</City>
   </Modern>
</Cities>
LIST consta de valores sin nombre. Son los valores de los campos hijo de Mediaeval y Modern los que se comparan y no los nombres.
Conceptos relacionados
Visión general de ESQL
Tareas relacionadas
Desarrollo de ESQL
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ak05660_