La sentencia EVAL toma un valor de carácter, lo interpreta como una sentencia SQL y lo procesa.
La función EVAL (que también se describe aquí) toma un valor de carácter pero lo interpreta como una expresión SQL que devuelve un valor.
EVAL toma un parámetro con formato de expresión, evalúa esta expresión y efectúa una transformación CAST del valor resultante en una serie de caracteres si éste no lo es todavía. Por lo tanto, la expresión que se pasa a EVAL debe poder representarse como una serie de caracteres.
En los ejemplos siguientes, A y B son variables escalares con un valor de entero y scalarVar1 y OperatorAsString son valores escalares de serie de caracteres.
La expresión A+B es aceptable porque aunque devuelve un valor de entero, los valores de entero se pueden representar como series de caracteres y la transformación CAST necesaria se realiza antes de que EVAL pase a la segunda fase de la evaluación.
El signo de punto y coma que se incluye al final del literal de serie final es necesario porque si se utiliza EVAL en lugar de una sentencia ESQL, su primera fase de evaluación debe devolver una serie que represente una sentencia ESQL válida, incluido el punto y coma final.
Las variables declaradas en una sentencia EVAL no existen fuera de dicha sentencia EVAL. De este modo, EVAL es similar a una función, en la que las variables declaradas localmente sólo son locales y salen del ámbito cuando se sale de la función.
EVAL resulta especialmente útil porque permite crear dinámicamente sentencias ESQL o expresiones. En el segundo y tercer ejemplo anterior, el valor de scalarVar1 u operatorAsString se puede establecer según el valor de un campo de mensaje de entrada u otro valor dinámico, con lo que se puede controlar de forma eficaz qué ESQL se ejecuta, sin que sea necesaria una escalera de IF THEN que potencialmente puede resultar muy larga.
No obstante, tenga en cuenta las implicaciones que el uso de EVAL puede tener en el rendimiento. Necesariamente, ejecutar y crear dinámicamente sentencias o expresiones requiere mucho más tiempo que ejecutar simplemente otras que ya se han creado previamente. Si el rendimiento es vital, es posible que prefiera escribir ESQL más específico pero más rápido.
En este ejemplo, EVAL se utiliza para sustituir una referencia de campo y no una expresión.
En este ejemplo, se pasa (SELECT T.x FROM Database.y) a EVAL y devuelve una lista que no puede representarse como una serie de caracteres.
SET OutputRoot.XML.Data.Result[] = EVAL('(SELECT T.x FROM Database.y AS T)');