E' possibile fare riferimento a più tabelle del database create nello stesso database. Utilizzare la clausola FROM nell'istruzione SELECT per unire i dati dalle due tabelle.
Nell'esempio riportato di seguito, si suppone che siano disponibili due tabelle del database denominate USERTABLE1 e USERTABLE2. Entrambe le tabelle dispongono di due colonne del tipo di dati char(6) (o equivalente).
USERTABLE1 contiene due righe:
Column1 | Column2 | |
---|---|---|
Riga 1 | value1 | value2 |
Riga 2 | value3 | value4 |
USERTABLE2 contiene due righe:
Column3 | Column4 | |
---|---|---|
Riga 1 | value5 | value6 |
Riga 2 | value7 | value8 |
Tutte le tabelle indicate da una singola funzione SELECT devono essere nello stesso database. Il database può essere quello predefinito (specificato nella proprietà "origine dati" del nodo) oppure un altro database (specificato nella clausola FROM della funzione SELECT).
Configurare il nodo Compute, Filter o Database utilizzato per identificare il database in cui sono state definite le tabelle. Per esempio, se si sta utilizzando il database predefinito, 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.XML.Test.Result[] = (SELECT A.Column1 AS FirstColumn, A.Column2 AS SecondColumn, B.Column3 AS ThirdColumn, B.Column4 AS FourthColumn FROM Database.USERTABLE1 AS A, Database.USERTABLE2 AS B WHERE A.Column1 = 'value1' AND B.Column4 = 'value8' );
Ciò determina il seguente contenuto del messaggio di output:
<Test> <Result> <FirstColumn>value1</FirstColumn> <SecondColumn>value2</SecondColumn> <ThirdColumn>value7</ThirdColumn> <FourthColumn>value8</FourthColumn> </Result> </Test>
L'esempio precedente illustra come accedere ai dati da due tabelle del database. E' possibile utilizzare clausole FROM più complesse per accedere a più tabelle del database (sebbene tutte le tabelle debbano essere nello stesso database). E' anche possibile fare riferimento ad una o più strutture ad albero del messaggio ed è possibile utilizzare SELECT per unire tabelle con tabelle, messaggi con messaggi oppure tabelle con messaggi. La sezione Unione dei dati da messaggi XML e tabelle del database contiene un esempio relativo all'unione di dati del messaggio con i dati in una tabella del database.
(definito dalla proprietà origine dati del nodo).
Se si specifica una procedura o una funzione ESQL sull'identificativo della colonna nella clausola WHERE, essa viene elaborata come parte della query del database e non come ESQL.
Considerare il seguente esempio:
SET OutputRoot.XML.Test.Result = THE(SELECT ITEM T.Column1 FROM Database.USERTABLE1 AS T WHERE UPPER(T.Column2) = 'VALUE2');
Questo codice prova a restituire le righe in cui il valore di Column2 convertito in maiuscolo è VALUE2. Tuttavia, solo il gestore del database può determinare il valore di T.Column2 per qualsiasi riga fornita e quindi non può essere elaborato da ESQL prima che venga eseguita la query al database, perché la clausola WHERE determina le righe restituite al flusso di messaggi.
Per questo motivo, UPPER viene passata al gestore del database per essere inclusa come parte dell'elaborazione. Tuttavia, se il gestore del database non può elaborare il token all'interno dell'istruzione select, viene restituito un errore.