Unione dei dati in un messaggio XML

La clausola FROM non è limitata ad un elemento. Se vengono specificati più elementi nella clausola FROM, si ottiene l'effetto di unione del prodotto cartesiano, in cui esiste un elemento nel risultato per tutte le combinazioni di elementi nei due elenchi. Questo è lo stesso effetto di unione del linguaggio SQL standard.

Il messaggio Invoice include una serie di dettagli relativi al cliente, al pagamento ed agli acquisti effettuati dal cliente. Se si utilizza il seguente codice ESQL per elaborare il messaggio Invoice di input:

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

viene generato il seguente messaggio di output:

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

Vengono visualizzati tre risultati, che forniscono il numero di descrizioni nel primo elenco (uno) moltiplicate per il numero di prezzi nel secondo (tre). I risultati riportano tutte le combinazioni dei due elenchi. E' possibile verificare ciò visualizzando i campi LastName e UnitPrice selezionati da ciascun risultato:

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

E' possibile unire dati in un elenco ed in un elemento diverso da un elenco, oppure in due elementi diversi da un elenco e così via. Ad esempio:

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

Notare la posizione di [] in ciascun caso. Nell'elenco FROM è possibile specificare qualsiasi numero di elementi, non solo uno o due. Se uno degli elementi specifica [] per indicare un elenco di elementi, l'istruzione SELECT genera un elenco di risultati (l'elenco potrebbe contenere un solo elemento ma l'istruzione SELECT potrebbe restituire un elenco di elementi). La destinazione dell'assegnazione deve specificare un elenco, per cui deve terminare con [] oppure è necessario utilizzare la parola chiave THE se la clausola WHERE garantisce la corrispondenza di una sola combinazione.

Concetti correlati
Panoramica dei flussi di messaggi
Panoramica di ESQL
Creazione di modelli di messaggio
Attività correlate
Progettazione di un flusso di messaggi
Definizione del contenuto del flusso di messaggi
Gestione dei file ESQL
Riferimenti correlati
Nodo Compute
Nodo Database
Nodo Filter
Riferimento ESQL
Funzione SELECT
Istruzione SET
Messaggio di esempio
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ak05820_