WebSphere Message Broker, Versão 8.0.0.5 Sistemas operacionais: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Consulte as informações sobre a versão mais recente do produto em IBM Integration Bus, Versão 9.0

Instrução EVAL

A instrução EVAL utiliza um valor do caractere, o interpreta como uma instrução SQL e processa essa instrução.

Para obter detalhes da função EVAL, consulte Função EVAL.

Sintaxe

Ler diagrama de sintaxeManter visual do diagrama de sintaxe
>>-EVAL--( SQL_character_value )-------------------------------><

EVAL toma um parâmetro na forma de uma expressão, avalia essa expressão e lança o valor resultante em uma cadeia de caracteres, se já não for uma. Portanto, a expressão transmitida para EVAL deve poder ser representada como uma cadeia de caracteres.

Após a conclusão deste primeiro estágio de avaliação, o comportamento de EVAL depende se ela está sendo utilizada como uma instrução ESQL completa, ou em lugar de uma expressão que forma parte de uma instrução ESQL:
  • Se ela for uma instrução ESQL completa, a cadeia de caracteres derivada da primeira avaliação de estágio será processada como se fosse uma instrução ESQL.
  • Se for uma expressão que forma parte de uma instrução ESQL, a cadeia de caracteres será avaliada como se fosse uma expressão ESQL e EVAL retorna o resultado.

Os procedimentos definidos pelo usuário não podem ser definidos em uma instrução EVAL mas EVAL pode ser usado para chamar um procedimento definido pelo usuário que está no escopo em que a instrução EVAL é usada.

Se você usar a instrução EVAL para chamar um procedimento definido pelo usuário que não é chamado de nenhum outro lugar no ESQL para um determinado nó, será necessário incluir o seguinte código no ESQL para assegurar que o procedimento definido pelo usuário que está sendo chamado seja incluído quando o código for compilado:
   IF (FALSE) THEN CALL procedure(<parameters>); END IF;
Observe que, no código precedente, você deve substituir procedure() pelo procedimento nomeado em questão.

Nos exemplos a seguir, A e B são variáveis escalares inteiras e scalarVar1 e OperatorAsString são variáveis escalares da cadeia de caracteres.

Os exemplos a seguir são utilizações válidas de EVAL:
  • SET OutputRoot.XMLNS.Data.Result = EVAL(A+B);

    A expressão A+B é aceitável porque, embora retorne um valor inteiro, os valores inteiros podem ser representados como cadeias de caracteres e o lançamento necessário é realizado antes que EVAL continue com o segundo estágio da sua avaliação.

  • SET OutputRoot.XMLNS.Data.Result = EVAL('A' || operatorAsString || 'B');
  • EVAL('SET ' || scalarVar1 || ' = 2;');

    O ponto-e-vírgula colocado no fim do literal da cadeia final é necessário porque, se EVAL estiver sendo utilizado no lugar de uma instrução ESQL, a avaliação do seu primeiro estágio deve retornar uma cadeia que represente uma instrução ESQL válida, incluindo o ponto-e-vírgula de encerramento.

Variáveis declaradas em uma instrução EVAL não existem fora dessa instrução EVAL.

A capacidade real de EVAL é que ela permite construir dinamicamente instruções ou expressões ESQL. No segundo e terceiro exemplos acima, o valor de scalarVar1 ou operatorAsString pode ser configurado de acordo com o valor de um campo de mensagem recebida, ou outro valor dinâmico, permitindo que você controle efetivamente qual ESQL é processada sem precisar de um uma expressão IF-THEN potencialmente comprida.

No entanto, considere as implicações de desempenho na utilização de EVAL. A construção e o processamento de instruções ou expressões dinâmicos são necessariamente mais demorados que simplesmente processar aquelas pré-construídas. Se o desempenho for vital, prefira escrever ESQL mais específico, porém mais rápido.

A seguir estão utilizações não válidas de EVAL:
  • SET EVAL(scalarVar1) = 2;

    Neste exemplo, EVAL está sendo utilizado para substituir uma referência de campo, não uma expressão.

  • SET OutputRoot.XMLNS.Data.Result[] = EVAL((SELECT T.x FROM Database.y AS T));

    Neste exemplo, (SELECT T.x FROM Database.y) transmitido para EVAL retorna uma lista, que não é representável como uma cadeia de caracteres.

O exemplo a seguir é aceitável, porque (SELECT T.x FROM Database.y AS T) é um literal de cadeia de caracteres, não uma expressão propriamente dita e, portanto, é representável como uma cadeia de caracteres.
SET OutputRoot.XMLNS.Data.Result[]
 = EVAL('(SELECT T.x FROM Database.y AS T)');

As funções que são referenciadas somente em uma instrução EVAL e não no resto do módulo ESQL, podem não estar incluídas no arquivo BAR. Nos exemplos a seguir, a função MyFunction deve ser referenciada em algum outro local no módulo ESQL, caso contrário, o arquivo BAR pode falhar para implementar.

EVAL('CALL MyFunction(parm1, parm2);');
DECLARE functionName CHARACTER 'Function';
DECLARE callStmt CHARACTER 'CALL My' || functionName || '(parm1, parm2);';
EVAL(callStmt);
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback

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

        
        Última atualização:
        
        Última atualização: 2015-02-28 18:29:54


Tópico de ReferênciaTópico de Referência | Versão 8.0.0.5 | ak05020_