Función EVAL
La función EVAL toma un valor de carácter y lo interpreta como una expresión SQL que devuelve un valor.
Para obtener detalles de la sentencia EVAL, consulte Sentencia EVAL.
Sintaxis
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.
No se pueden definir funciones definidas por el usuario dentro de una función EVAL, pero EVAL se puede utilizar para llamar a una función definida por el usuario que esté en el ámbito en el que se utiliza la función EVAL.
IF (FALSE) THEN CALL function(<parameters>) INTO Environment.temp; END IF;
Tenga en cuenta que, en el ejemplo anterior, debe sustituirfunction()
con el nombre de la función en cuestión.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.
SET OutputRoot.XMLNS.Data.Result = EVAL(A+B);
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.
SET OutputRoot.XMLNS.Data.Result = EVAL('A' || operatorAsString || 'B');
EVAL('SET ' || scalarVar1 || ' = 2;');
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.
EVAL resulta especialmente útil porque permite crear dinámicamente sentencias o expresiones ESQL. 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, o de 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.
SET EVAL(scalarVar1) = 2;
En este ejemplo, EVAL se utiliza para sustituir una referencia de campo y no una expresión.
SET OutputRoot.XMLNS.Data.Result[] = EVAL((SELECT T.x FROM Database.y AS T));
En este ejemplo, el
(SELECT T.x FROM Database.y)
pasado a EVAL devuelve una lista, que no es representable como una serie de caracteres.
(SELECT
T.x FROM Database.y AS T)
es un literal de serie de caracteres, no una expresión en sí mismo y, por lo tanto, es representable como una serie de caracteres.SET OutputRoot.XMLNS.Data.Result[]
= EVAL('(SELECT T.x FROM Database.y AS T)');