L'istruzione EVAL prende un valore character, lo interpreta come istruzione SQL e lo elabora.
La funzione EVAL (descritta in questa sezione) prende un valore character ma lo interpreta come un'espressione ESQL che restituisce un valore.
EVAL utilizza un parametro nel formato di un'espressione, valuta tale espressione ed assegna il valore risultante ad una stringa di caratteri. Per questo motivo, l'espressione passata ad EVAL deve poter essere rappresentata come stringa di caratteri.
Negli esempi riportati di seguito, A e B sono variabili scalari integer e scalarVar1 e OperatorAsString sono variabili scalari della stringa di caratteri.
L'espressione A+B è accettabile perché, sebbene restituisca un valore integer, i valori integer sono rappresentabili come stringhe di caratteri e l'assegnazione necessaria viene eseguita prima che EVAL continui con la seconda fase della valutazione.
Il carattere punto e virgola alla fine del letterale di stringa finale è necessario, perché se EVAL viene utilizzata al posto di un'istruzione ESQL, la prima parte della valutazione deve restituire una stringa che rappresenta un'istruzione ESQL valida, incluso il carattere punto e virgola finale.
Le variabili dichiarate all'interno di un'istruzione EVAL non esistono al di fuori dell'istruzione EVAL. In questo, EVAL è simile ad una funzione, in cui le variabili dichiarate localmente sono solo locali e non sono contenute nell'ambito all'uscita della funzione.
La reale funzione di EVAL è quella di consentire la creazione dinamica di espressioni ed istruzione ESQL. Nel secondo e nel terzo esempio sopra riportati, il valore di scalarVar1 oppure operatorAsString può essere impostato in base al valore di un campo dei messaggi in arrivo, o di un altro valore dinamico, consentendo di controllare l'ESQL eseguito senza richiedere l'utilizzo di IF THEN, potenzialmente lungo.
Tuttavia, considerare le implicazioni relative alle prestazioni nell'utilizzo di EVAL. La costruzione dinamica e l'esecuzione di istruzioni o espressioni richiede necessariamente più tempo rispetto alla semplice esecuzione di istruzioni o espressioni già create. Se le prestazioni hanno massima importanza, è possibile che si desideri scrivere codice ESQL più specifico, ma più rapido.
In questo esempio, EVAL viene utilizzato per sostituire un riferimento di campo e non un'espressione.
In questo esempio, l'istruzione (SELECT T.x FROM Database.y) passata ad EVAL restituisce un elenco, che non è rappresentabile come stringa di caratteri.
SET OutputRoot.XML.Data.Result[] = EVAL('(SELECT T.x FROM Database.y AS T)');