Instrução EVAL

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

A função EVAL (também descrita aqui) utiliza um valor de caractere, mas o interpreta como uma expressão ESQL que retorna um valor.

Nota: Funções e procedimentos definidos pelo usuário não podem ser definidos dentro de uma instrução EVAL ou de uma função EVAL.

SINTAXE

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 for uma instrução ESQL completa, a cadeia de caracteres derivada do primeiro estágio de avaliação será executada 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.

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.XML.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.XML.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.

As variáveis declaradas em uma instrução EVAL não existem fora dessa instrução EVAL. Dessa maneira, EVAL é semelhante a uma função, na qual as variáveis declaradas localmente são apenas locais e saem do escopo quando a função é encerrada.

A capacidade real de EVAL é que ela permite construir dinamicamente instruções ou expressões ESQL. No segundo e no terceiro exemplos acima, o valor de scalarVar1 ou operatorAsString pode ser definido de acordo com o valor de um campo de mensagem de entrada ou outro valor dinâmico, permitindo controlar efetivamente qual ESQL é executado, sem necessidade de uma escada IF THEN potencialmente comprida.

No entanto, considere as implicações de desempenho na utilização de EVAL. A construção e execução dinâmicas de instruções ou expressões consomem, necessariamente, muito mais tempo do que a simples execução das instruções ou expressões 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.XML.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.XML.Data.Result[]
  = EVAL('(SELECT T.x FROM Database.y AS T)');
Conceitos relacionados
Visão Geral do ESQL
Tarefas relacionadas
Desenvolvendo ESQL
Referências relacionadas
Diagramas de Sintaxe: Tipos Disponíveis
instruções ESQL
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ak05020_