EVAL-Anweisung

Die EVAL-Anweisung umfasst einen Zeichenwert, interpretiert ihn als SQL-Anweisung und verarbeitet ihn.

Die EVAL-Funktion (ebenfalls hier beschrieben) umfasst einen Zeichenwert, interpretiert ihn jedoch als ESQL-Ausdruck, der einen Wert zurückgibt.

Anmerkung: Benutzerdefinierte Funktionen und Prozeduren können innerhalb einer EVAL-Anweisung oder EVAL-Funktion nicht definiert werden.

SYNTAX

EVAL umfasst einen Parameter in Form eines Ausdrucks, wertet diesen Ausdruck aus und setzt den daraus resultierenden Wert in eine Zeichenfolge um, falls dies noch nicht geschehen ist. Der Ausdruck, der an EVAL übermittelt wurde, muss deshalb als Zeichenfolge dargestellt werden können.

Nachdem diese erste Phase der Auswertung beendet wurde, hängt das Verhalten von EVAL davon ab, ob EVAL als vollständige ESQL-Anweisung oder anstelle eines Ausdrucks verwendet wird, der Teil einer ESQL-Anweisung ist:
  • Falls es sich um eine vollständige ESQL-Anweisung handelt, wird die Zeichenfolge, die aus der ersten Phase derAuswertung hervorgegangen ist, so ausgeführt, als wäre sie eine ESQL-Anweisung.
  • Falls es sich um einen Ausdruck handelt, der Teil einer ESQL-Anweisung ist, wird die Zeichenfolge so ausgewertet, als wäre sie ein ESQL-Ausdruck, und EVAL gibt das Ergebnis zurück.

In den folgenden Beispielen sind A und B ganzzahlige Skalarvariablen, und 'skalarVar1' und 'OperatorAsString' sind Skalarvariablen einer Zeichenfolge.

Die folgenden Beispiele sind gültige Verwendungen von EVAL:
  • SET OutputRoot.XML.Data.Result = EVAL(A+B);

    Obwohl er einen ganzzahligen Wert zurückgibt, ist der Ausdruck A+B zulässig, denn ganzzahlige Werte sind als Zeichenfolge darstellbar, und die notwendige Umsetzung wird durchgeführt, bevor EVAL mit der zweiten Phase der Auswertung beginnt.

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

    Das Semikolon am Ende des abschließenden Zeichenfolgeliterals ist notwendig, da, falls EVAL anstelle einer ESQL-Anweisung verwendet wird, die erste Phase der Auswertung eine Zeichenfolge zurückgeben muss, die eine gültige ESQL-Anweisung, einschließlich des abschließenden Semikolons, darstellt.

Variablen, die innerhalb einer EVAL-Anweisung deklariert wurden, gibt es außerhalb dieser EVAL-Anweisung nicht. Somit ist EVAL ähnlich einer Funktion, in der lokal deklarierte Variablen nur lokal vorhanden sind und den Geltungsbereich verlassen, wenn die Funktion beendet wird.

Der große Vorteil von EVAL liegt darin, dass es möglich ist, ESQL-Anweisungen oder -Ausdrücke dynamisch zu erstellen. In den obigen Beispielen zwei und drei kann der Wert von 'skalarVar1' oder von 'OperatorAsString' entsprechend dem Wert eines eingehenden Nachrichtenfelds oder eines anderen dynamischen Werts festgelegt werden, wodurch effektiv gesteuert werden kann, welcher ESQL-Code ausgeführt wird, ohne dass eine möglicherweise aufwändige IF THEN-Struktur benötigt wird.

Bei der Verwendung von EVAL sollten jedoch die Auswirkungen auf die Leistung berücksichtigt werden. Dynamischer Aufbau und Ausführung von Anweisungen oder Ausdrücken ist zwangsläufig zeitaufwändiger als die einfache Ausführung von vorgefertigten Elementen. Wenn es auf Leistung ankommt, werden Sie es unter Umständen bevorzugen, spezifischeren, aber auch schnelleren ESQL-Code zu schreiben.

Die folgenden Beispiele sind ungültige Verwendungen von EVAL:
  • SET EVAL(scalarVar1) = 2;

    In diesem Beispiel wird EVAL nicht dazu verwendet, einen Ausdruck, sondern eine Feldreferenz zu ersetzen.

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

    In diesem Beispiel gibt das an EVAL übermittelte Element (SELECT T.x FROM Database.y) eine Liste zurück, die nicht als Zeichenfolge dargestellt werden kann.

Das folgende Beispiel ist zulässig, da das Element (SELECT T.x FROM Database.y AS T) ein Zeichenfolgeliteral und kein vollständiger Ausdruck in sich selbst ist und somit als Zeichenfolge dargestellt werden kann.
SET OutputRoot.XML.Data.Result[]
 = EVAL('(SELECT T.x FROM Database.y AS T)');
Zugehörige Konzepte
Übersicht zu ESQL
Zugehörige Tasks
ESQL erstellen
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2005 Letzte Aktualisierung: Nov 17, 2005
ak05020_