WebSphere Message Broker, Versión 8.0.0.5 Sistemas operativos: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Consulte la información sobre la última versión del producto en IBM Integration Bus, Versión 9.0

Sentencia EVAL

La sentencia EVAL toma un valor de carácter, lo interpreta como una sentencia SQL y procesa dicha sentencia.

Para obtener información detallada sobre la función EVAL, consulte Función EVAL.

Sintaxis

Leer el esquema de sintaxisOmitir el esquema de sintaxis visual
>>-EVAL--( valor_carácter_SQL )--------------------------------><

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.

Una vez completada esta evaluación de primera fase, el comportamiento de EVAL depende de si se está utilizando como una sentencia ESQL completa o en lugar de una expresión que forma parte de una sentencia ESQL:
  • Si se trata de una sentencia ESQL completa, la serie de caracteres derivada de la evaluación de primera fase se procesa como si fuera una sentencia ESQL.
  • Si se trata de una expresión que forma parte de una sentencia ESQL, la serie de caracteres se evalúa como si fuera una expresión ESQL y EVAL devuelve el resultado.

No se pueden definir procedimientos definidos por el usuario dentro de una sentencia EVAL, pero EVAL se puede utilizar para llamar a un procedimiento definido por el usuario que esté en el ámbito en el que se utiliza la sentencia EVAL.

Si utiliza la sentencia EVAL para llamar a un procedimiento definido por el usuario, al que no se llame desde ningún otro lugar en el ESQL de un determinado nodo, deberá añadir el código siguiente a su ESQL, para garantizar que el procedimiento definido por el usuario al que se llama se incluya cuando se compile el código:
   IF (FALSE) THEN CALL procedimiento(<parámetros>); END IF;
Tenga en cuenta que, en el código anterior, debe sustituir procedimiento() por el procedimiento con nombre 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.

Los ejemplos siguientes son usos válidos de EVAL:
  • 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.

Las variables declaradas en una sentencia EVAL no existen fuera de dicha sentencia EVAL.

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 procesa, 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, procesar y crear dinámicamente sentencias o expresiones requiere mucho más tiempo que procesar 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.

Los siguientes no son usos válidos de EVAL:
  • 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, se pasa (SELECT T.x FROM Database.y) a EVAL y devuelve una lista que no puede representarse como una serie de caracteres.

El ejemplo siguiente resulta aceptable porque (SELECT T.x FROM Database.y AS T) es un literal de serie de caracteres y no una expresión propiamente dicha y, por lo tanto, se puede representar como una serie de caracteres.
SET OutputRoot.XMLNS.Data.Result[]
 = EVAL('(SELECT T.x FROM Database.y AS T)');

Las funciones a las que se hace referencia solamente en una sentencia EVAL, y no en el resto del módulo ESQL, es posible que no estén incluidas en el archivo BAR. En los ejemplos siguientes, debe hacerse referencia a la función MyFunction en algún otro lugar del módulo ESQL, de lo contrario, el archivo BAR puede fallar en el despliegue.

EVAL('CALL MyFunction(parm1, parm2);');
DECLARE functionName CHARACTER 'Function';
DECLARE callStmt CHARACTER 'CALL My' || functionName || '(parm1, parm2);';
EVAL(callStmt);
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Comentarios

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Última actualización:
        
        Última actualización: 2015-02-28 16:59:54


Tema de referenciaTema de referencia | Versión 8.0.0.5 | ak05020_