Unión de datos en un mensaje

La cláusula FROM de una función SELECT no está limitada a un solo elemento. Si especifica varios elementos en la cláusula FROM produce el efecto de unión de productos cartesianos típico, en el que el resultado incluye un elemento para todas las combinaciones de elementos en las dos listas.

La utilización de la cláusula FROM de este modo produce el mismo efecto de unión que el SQL estándar.

El mensaje Invoice incluye un conjunto de detalles del cliente, detalles de pago y detalles de las compras realizadas por el cliente. Codifique el ESQL siguiente para procesar el mensaje Invoice de entrada:

SET OutputRoot.XMLNS.Items.Item[] = 
   (SELECT D.LastName, D.Billing,
           P.UnitPrice, P.Quantity 
    FROM InputBody.Invoice.Customer[] AS D,
         InputBody.Invoice.Purchases.Item[] AS P);

Se genera el mensaje de salida siguiente:

<Items>
 <Item>
  <LastName>Smith</LastName>
  <Billing>
   <Address>14 High Street</Address>
   <Address>Hursley Village</Address>
   <Address>Hampshire</Address>
   <PostCode>SO213JR</PostCode>
  </Billing>
  <UnitPrice>27.95</UnitPrice>
  <Quantity>2</Quantity>
 </Item>
 <Item>
  <LastName>Smith</LastName>
  <Billing>
   <Address>14 High Street</Address>
   <Address>Hursley Village</Address>
   <Address>Hampshire</Address>
   <PostCode>SO213JR</PostCode>
  </Billing>
  <UnitPrice>42.95</UnitPrice>
  <Quantity>1</Quantity>
 </Item>
 <Item>
  <LastName>Smith</LastName>
  <Billing>
   <Address>14 High Street</Address>
   <Address>Hursley Village</Address>
   <Address>Hampshire</Address>
   <PostCode>SO213JR</PostCode>
  </Billing>
  <UnitPrice>59.99</UnitPrice>
  <Quantity>1</Quantity>
 </Item>
</Items>

Se producen tres resultados, que proporcionan el número de descripciones de la primera lista (una) multiplicado por el número de precios de la segunda (tres). Los resultados pasan sistemáticamente por todas las combinaciones de las dos listas. Puede verlo si observa los campos LastName y UnitPrice seleccionados de cada resultado:

LastName Smith   UnitPrice 27.95
LastName Smith   UnitPrice 42.95
LastName Smith   UnitPrice 59.99

Puede enlazar los datos generados de una lista y con los que no corresponden a una lista o puede enlazar datos que no correspondan a dos listas. Por ejemplo:

OutputRoot.XMLNS.Test.Result1[] =
  (SELECT ... FROM InputBody.Test.A[], InputBody.Test.b);
OutputRoot.XMLNS.Test.Result1 =
  (SELECT ... FROM InputBody.Test.A, InputBody.Test.b);

La ubicación de [] en cada caso es significativa. En la cláusula FROM se puede especificar cualquier número de elementos, no simplemente uno ni dos. Si cualquiera de los elementos especifica [] para indicar una lista de elementos, la función SELECT devuelve una lista de resultados (es posible que la lista sólo contenga un elemento, pero la función SELECT puede devolver una lista de elementos).

El destino de la asignación debe especificar una lista (de modo que debe finalizar en []) o debe utilizar la Función THE si sabe que la cláusula WHERE garantiza que sólo coincida una combinación.

Conceptos relacionados
Visión general de flujos de mensajes
Visión general de ESQL
Modelado de mensajes
Tareas relacionadas
Diseñar un flujo de mensajes
Definir el contenido del flujo de mensajes
Gestión de archivos ESQL
Referencia relacionada
Nodo Compute
Nodo Database
Nodo Filter
Referencia de ESQL
Función SELECT
Sentencia SET
Función THE
Mensaje de ejemplo
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
Última actualización : 2009-02-16 13:55:37

ak05820_