A função EVAL utiliza um valor de caractere e interpreta esse valor como uma expressão ESQL que retorna um valor.
Para obter detalhes da instrução EVAL, consulte Instrução EVAL.
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.
As funções definidas pelo usuário não podem ser definidas em uma função EVAL mas EVAL pode ser usada para chamar uma função definida pelo usuário que está no escopo no qual a função EVAL é usada.
IF (FALSE) THEN CALL function(<parameters>) INTO Environment.temp; END IF;
Observe que,
no exemplo precedente, você deve substituir function() pelo
nome da função 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.
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.
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.
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 é executada sem precisar de uma expressão 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.
Neste exemplo, EVAL está sendo utilizado para substituir uma referência de campo, não uma expressão.
Neste exemplo, (SELECT T.x FROM Database.y) transmitido para EVAL retorna uma lista, que não é representável como uma cadeia de caracteres.
SET OutputRoot.XMLNS.Data.Result[]
= EVAL('(SELECT T.x FROM Database.y AS T)');