Enlace de datos de un mensaje XML

La cláusula FROM no está limitada a un solo elemento. Si especifica varios elementos en la cláusula FROM se genera el efecto de enlace de productos cartesianos habitual, en el que hay un elemento del resultado para todas las combinaciones de elementos de las dos listas. Es el mismo efecto de enlace que el del 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. Si codifica el ESQL siguiente para procesar el mensaje Invoice de entrada:

SET OutputRoot.XML.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 siguiente mensaje de entrada:

<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>

Hay tres resultados que proporcionan el número de descripciones de la primera lista (uno) 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.XML.Test.Result1[] =
  (SELECT ... FROM InputBody.Test.A[], InputBody.Test.b);
OutputRoot.XML.Test.Result1 =
  (SELECT ... FROM InputBody.Test.A, InputBody.Test.b);

Observe la ubicación de [] en cada caso. En la lista 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 sentencia SELECT genera una lista de resultados (la lista puede contener sólo un elemento pero potencialmente SELECT puede devolver una lista de elementos). El destino de la asignación debe especificar una lista, por lo tanto, debe finalizarla con [] o debe utilizar la palabra clave THE si sabe que la cláusula WHERE garantiza que sólo hay una combinación coincidente.

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
Mensaje de ejemplo
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ak05820_