La sentencia EVAL toma un valor de caracteres, lo interpreta como una sentencia SQL y lo procesa.
La función EVAL (también descrita aquí) toma un valor de caracteres, pero lo interpreta como una expresión ESQL que devuelve un valor.
EVAL toma un parámetro en el formato de una expresión, evalúa esta expresión y emite el valor resultante a una serie de caracteres si no lo es ya. Por consiguiente, una expresión que se pasa a EVAL debe poderse representar como una serie de caracteres.
En los ejemplos siguientes, A y B son variables escalares enteros, y scalarVar1 y OperatorAsString son variables escalares de serie de caracteres.
La expresión A+B es aceptable porque, aunque devuelve un valor entero, los valores enteros se pueden representar como series de caracteres y la transformación CAST necesaria se realiza antes de que EVAL continúe con su segunda fase de evaluación.
El punto y coma incluido al final del literal de serie final es necesario, porque si se utiliza EVAL en lugar de una sentencia ESQL, su evaluación de primera fase debe devolver una serie que represente una sentencia ESQL válida, incluido el punto y coma de terminación.
Las variables declaradas en una sentencia EVAL no existen fuera de esa sentencia EVAL. De esta manera, EVAL es similar a una función, en la que las variables declaradas localmente son sólo locales y quedan fuera de ámbito al salir de la función.
La potencia real de EVAL es que permite construir de manera dinámica sentencias o expresiones de ESQL. En los ejemplos segundo y tercero indicados anteriormente, el valor de scalarVar1 u operatorAsString se puede establecer de acuerdo al valor de un campo de mensaje entrante u otro valor dinámico, que permite controlar efectivamente que se ejecuta ESQL sin que necesite una escalera IF THEN potencialmente extensa.
Sin embargo, examine las implicaciones que utilizar EVAL tiene en el rendimiento. La construcción y ejecución dinámica de las sentencias o expresiones consume necesariamente más tiempo que sólo ejecutar las preconstruidas. Si el rendimiento es muy importante, tal vez prefiera escribir un ESQL más específico pero más rápido.
En este ejemplo, se utiliza EVAL para sustituir una referencia de campo, no una expresión.
En este ejemplo, el (SELECT T.x FROM Database.y) pasado a EVAL devuelve una lisa, que no se puede representar como una serie de caracteres.
SET OutputRoot.XML.Data.Result[] = EVAL('(SELECT T.x FROM Database.y AS T)');
Conceptos relacionados
ESQL
Tareas relacionadas
Desarrollo de ESQL
Referencia relacionada
Preferencia de sintaxis
Sentencias ESQL
Avisos |
Marcas registradas |
Descargas |
Biblioteca |
Soporte |
Información de retorno (feedback)
![]() ![]() |
ak05020_ |