Istruzione EVAL

L'istruzione EVAL prende un valore character, lo interpreta come istruzione SQL e lo elabora.

La funzione EVAL (descritta in questa sezione) prende un valore character ma lo interpreta come un'espressione ESQL che restituisce un valore.

Nota: Le procedure e le funzioni definite dall'utente non possono essere definite all'interno di un'istruzione EVAL o di una funzione EVAL.

SINTASSI

EVAL utilizza un parametro nel formato di un'espressione, valuta tale espressione ed assegna il valore risultante ad una stringa di caratteri. Per questo motivo, l'espressione passata ad EVAL deve poter essere rappresentata come stringa di caratteri.

Una volta completata questa prima valutazione, il funzionamento di EVAL dipende dal fatto che venga utilizzata come istruzione ESQL completa oppure al posto di un'espressione che fa parte di un'istruzione ESQL:
  • Se è un'istruzione ESQL completa, la stringa di caratteri derivata dalla prima valutazione viene eseguita come se fosse un'istruzione ESQL.
  • Se è un'espressione che fa parte di un'istruzione ESQL, la stringa di caratteri viene valutata come se fosse un'espressione ESQL ed EVAL restituisce il risultato.

Negli esempi riportati di seguito, A e B sono variabili scalari integer e scalarVar1 e OperatorAsString sono variabili scalari della stringa di caratteri.

Gli esempi riportati di seguito illustrano gli utilizzi validi di EVAL:
  • SET OutputRoot.XML.Data.Result = EVAL(A+B);

    L'espressione A+B è accettabile perché, sebbene restituisca un valore integer, i valori integer sono rappresentabili come stringhe di caratteri e l'assegnazione necessaria viene eseguita prima che EVAL continui con la seconda fase della valutazione.

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

    Il carattere punto e virgola alla fine del letterale di stringa finale è necessario, perché se EVAL viene utilizzata al posto di un'istruzione ESQL, la prima parte della valutazione deve restituire una stringa che rappresenta un'istruzione ESQL valida, incluso il carattere punto e virgola finale.

Le variabili dichiarate all'interno di un'istruzione EVAL non esistono al di fuori dell'istruzione EVAL. In questo, EVAL è simile ad una funzione, in cui le variabili dichiarate localmente sono solo locali e non sono contenute nell'ambito all'uscita della funzione.

La reale funzione di EVAL è quella di consentire la creazione dinamica di espressioni ed istruzione ESQL. Nel secondo e nel terzo esempio sopra riportati, il valore di scalarVar1 oppure operatorAsString può essere impostato in base al valore di un campo dei messaggi in arrivo, o di un altro valore dinamico, consentendo di controllare l'ESQL eseguito senza richiedere l'utilizzo di IF THEN, potenzialmente lungo.

Tuttavia, considerare le implicazioni relative alle prestazioni nell'utilizzo di EVAL. La costruzione dinamica e l'esecuzione di istruzioni o espressioni richiede necessariamente più tempo rispetto alla semplice esecuzione di istruzioni o espressioni già create. Se le prestazioni hanno massima importanza, è possibile che si desideri scrivere codice ESQL più specifico, ma più rapido.

Di seguito sono riportati utilizzi non validi di EVAL:
  • SET EVAL(scalarVar1) = 2;

    In questo esempio, EVAL viene utilizzato per sostituire un riferimento di campo e non un'espressione.

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

    In questo esempio, l'istruzione (SELECT T.x FROM Database.y) passata ad EVAL restituisce un elenco, che non è rappresentabile come stringa di caratteri.

L'esempio riportato di seguito è accettabile perché (SELECT T.x FROM Database.y AS T) è un letterale della stringa di caratteri e non un'espressione e quindi può essere rappresentata come stringa di caratteri.
SET OutputRoot.XML.Data.Result[]
 = EVAL('(SELECT T.x FROM Database.y AS T)');
Concetti correlati
Panoramica di ESQL
Attività correlate
Sviluppo di ESQL
Riferimenti correlati
Diagrammi di sintassi: tipi disponibili
Istruzioni ESQL
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ak05020_