E' possibile configurare un nodo Compute, Filter o Database per selezionare i dati dalle colonne del database ed includerli in un messaggio di output. Nell'esempio riportato di seguito si suppone che sia disponibile una tabella del database denominata USERTABLE con due colonne del tipo di dati char(6) (o equivalenti) denominate Column1 e Column2. La tabella contiene due righe:
Column1 | Column2 | |
---|---|---|
Riga 1 | value1 | value2 |
Riga 2 | value3 | value4 |
Configurare il nodo Compute, Filter o Database in modo da identificare il database in cui è stata definita la tabella. Per esempio, se si sta utilizzando il database predefinito (specificato nella proprietà "origine dati" del nodo), fare clic con il tasto destro del mouse sul nodo, selezionare Apri ESQL e inserire le seguenti istruzioni ESQL nel modulo per questo nodo:
SET OutputRoot = InputRoot; DELETE FIELD OutputRoot.*[<]; SET OutputRoot.XML.Test.Result[] = (SELECT T.Column1, T.Column2 FROM Database.USERTABLE AS T);
Ciò produce il seguente messaggio di output:
<Test> <Result> <Column1>value1</Column1> <Column2>value2</Column2> </Result> <Result> <Column1>value3</Column1> <Column2>value4</Column2> </Result> </Test>
<Test> <Result> <Column1></Column1> <Column2></Column2> </Result> <Result> <Column1></Column1> <Column2></Column2> </Result> </Test>
Non è importante la struttura XML esatta, ma la tag che racchiude il codice deve essere <Test> per corrispondere al riferimento in ESQL. In caso contrario, le istruzioni ESQL determinano la creazione di tag di livello superiore, che non corrispondono a codice XML valido.
Se si desidera creare un messaggio di output che contiene tutte le colonne di tutte le righe che soddisfano una particolare condizione, utilizzare l'istruzione SELECT con una clausola WHERE:
-- Declare and initialize a variable to hold the -- test vaue (in this case the surname Smith) DECLARE CurrentCustomer STRING 'Smith'; -- Loop through table records to extract matching information SET OutputRoot.XML.Invoice[] = (SELECT R FROM Database.USERTABLE AS R WHERE R.Customer.LastName = CurrentCustomer );
I campi del messaggio vengono creati nello stesso ordine in cui le colonne sono visualizzate nella tabella.
Se si conosce il linguaggio SQL in un ambiente di database, è possibile prevedere l'istruzione SELECT *. Tale istruzione non è accettata dal broker perché è necessario avviare tutti i riferimenti alle colonne con un nome della correlazione. Ciò evita ambiguità con le variabili dichiarate. Inoltre, se si utilizza SELECT I.*, questa istruzione è accettata dal broker ma l'asterisco * viene interpretato come il primo elemento child e non come tutti gli elementi, come previsto da altre istruzioni SQL del database.
Se il sistema database è sensibile al maiuscolo/minuscolo, è necessario utilizzare un approccio alternativo. Tale approccio è necessario anche se si desidera modificare il nome del campo generato:
SET OutputRoot = InputRoot; SET OutputRoot.XML.Test.Result[] = (SELECT T.Column1 AS Column1, T.Column2 AS Column2 FROM Database.USERTABLE AS T);
Questo esempio produce lo stesso messaggio dell'esempio precedente. Verificare che i riferimenti alle colonne del database (in questo esempio, T.Column1 and T.Column2) siano specificate con le lettere maiuscole e minuscole corrette in modo da corrispondere esattamente alle definizioni del database. In caso contrario, ad esempio, se si specifica T.COLUMN1, il broker genera un errore runtime. Notare l'utilizzo di Column1 e Column2 nell'istruzione SELECT. E' possibile utilizzare qualsiasi valore; non è necessario che i valori corrispondano ai nomi delle colonne definite nel database come in questo esempio.