Consultare gli esempi riportati di seguito e modificarli in base alle proprie necessità. Tutti gli esempi si basano sul messaggio Invoice come input.
Considerare il seguente codice ESQL:
SET OutputRoot.XML.Data.Output[] = (SELECT R.Quantity, R.Author FROM InputRoot.XML.Invoice.Purchases.Item[] AS R);
Quando il messaggio Invoice viene elaborato da questo ESQL, viene creato il seguente messaggio di output:
<Data> <Output> <Quantity>2</Quantity> <Autho>Neil Bradley</Autho> </Output> <Output> <Quantity>1</Quantity> <Autho>Don Chamberlin</Autho> </Output> <Output> <Quantity>1</Quantity> <Autho>Philip Heller, Simon Roberts</Autho> </Output> </Data>
Sono disponibili tre campi Output, uno per ciascun campo Item. Ciò si verifica perché, per impostazione predefinita, SELECT crea un elemento nel proprio elenco di risultati per ciascun elemento descritto dall'elenco FROM. All'interno di ciascun campo Output, esiste un Field per ciascun campo indicato nella clausola SELECT e questi sono nell'ordine in cui vengono specificati all'interno di SELECT, non nell'ordine in cui sono visualizzati nel messaggio in arrivo.
La variabile R introdotta dalla parola chiave AS finale è conosciuta come nome della correlazione. E' una variabile locale che rappresenta ciascuno dei campi indicati dalla clausola FROM. Non ha alcun significato per il nome scelto. Riepilogando, questa semplice conversione esegue due operazioni:
Di seguito è riportata la stessa conversione implementata da un algoritmo procedurale:
DECLARE i INTEGER 1; DECLARE count INTEGER CARDINALITY(InputRoot.XML.Invoice.Purchases.Item[]); WHILE (i <= count) SET OutputRoot.XML.Data.Output[i].Quantity = InputRoot.XML.Invoice.Purchases.Item[i].Quantity; SET OutputRoot.XML.Data.Output[i].Author = InputRoot.XML.Invoice.Purchases.Item[i].Author; SET i = i+1; END WHILE;
Tali esempi illustrano che la versione SELECT della conversione è molto più breve. Inoltre, viene eseguita più rapidamente.
L'esempio riportato di seguito illustra una conversione più avanzata:
SET OutputRoot.XML.Data.Output[] = (SELECT R.Quantity AS Book.Quantity, R.Author AS Book.Author FROM InputRoot.XML.Invoice.Purchases.Item[] AS R );
In questa conversione, una clausola AS è associata a ciascun elemento nella clausola SELECT. Ciò assegna a ciascun campo nel risultato un nome esplicito invece dei nomi dei campi ereditati dall'input. Tali nomi possono essere percorsi (un elenco di nomi separati da punti), come illustrato nell'esempio. Quindi, la struttura del messaggio di output può essere differente da quella del messaggio di input. Utilizzando lo stesso messaggio Invoice, il risultato è:
<Data> <Output> <Book> <Quantity>2</Quantity> <Author>Neil Bradley</Author> </Book> </Output> </Data> <Data> <Output> <Book> <Quantity>2</Quantity> <Author>Neil Bradley</Author> </Book> </Output> <Output> <Book> <Quantity>1</Quantity> <Author>Don Chamberlin</Author> </Book> </Output> <Output> <Book> <Quantity>1</Quantity> <Author>Philip Heller, Simon Roberts</Author> </Book> </Output> </Data>
Le espressioni nella clausola SELECT possono essere di qualsiasi complessità e non esistono particolari limitazioni. Possono includere operatori, funzioni, letterali e possono fare riferimento a variabili o campi non relativi al nome della correlazione. L'esempio riportato di seguito illustra espressioni più complesse:
SET OutputRoot.XML.Data.Output[] = (SELECT 'Start' AS Header, 'Number of books:' || R.Quantity AS Book.Quantity, R.Author || ':Name and Surname' AS Book.Author, 'End' AS Trailer FROM InputRoot.XML.Invoice.Purchases.Item[] AS R );
Utilizzando lo stesso messaggio Invoice, il risultato in questo caso è:
<Data> <Output> <Header>Start</Header> <Book> <Quantity>Number of books:2</Quantity> <Author>Neil Bradley:Name and Surname</Author> </Book> <Trailer>End</Trailer> </Output> <Output> <Header>Start</Header> <Book> <Quantity>Number of books:1</Quantity> <Author>Don Chamberlin:Name and Surname</Author> </Book> <Trailer>End</Trailer> </Output> <Output> <Header>Start</Header> <Book> <Quantity>Number of books:1</Quantity> <Author>Philip Heller, Simon Roberts:Name and Surname</Author> </Book> <Trailer>End</Trailer> </Output> </Data>
Come illustrato in precedenza, le clausole AS della clausola SELECT contengono un percorso che descrive il nome completo del campo da creare nel risultato. Tali percorsi possono anche specificare (come è normale per i percorsi) il tipo di campo da creare. La seguente conversione di esempio specifica i tipi di dati. In questo caso, i dati con tag XML vengono convertiti in attributi XML:
SET OutputRoot.XML.Data.Output[] = (SELECT R.Quantity.* AS Book.(XML.Attribute)Quantity, R.Author.* AS Book.(XML.Attribute)Author FROM InputRoot.XML.Invoice.Purchases.Item[] AS R );
Utilizzando lo stesso messaggio Invoice, il risultato è:
<Data> <Output> <Book Quantity="2" Author="Neil Bradley"/> </Output> <Output> <Book Quantity="1" Author="Don Chamberlin"/> </Output> <Output> <Book Quantity="1" Author="Philip Heller, Simon Roberts"/> </Output> </Data>
Infine, è possibile utilizzare una clausola WHERE per eliminare alcuni risultati. Nell'esempio riportato di seguito, viene utilizzata una clausola WHERE per rimuovere i risultati in cui viene soddisfatto un criterio specifico. Viene incluso o escluso un intero risultato:
SET OutputRoot.XML.Data.Output[] = (SELECT R.Quantity AS Book.Quantity, R.Author AS Book.Author FROM InputRoot.XML.Invoice.Purchases.Item[] AS R WHERE R.Quantity = 2 );
Utilizzando lo stesso messaggio di input, il risultato è:
<Data> <Output> <Book> <Quantity>2</Quantity> <Author>Neil Bradley</Author> </Book> </Output> </Data>