Die EVAL-Funktion umfasst einen Zeichenwert, interpretiert ihn jedoch als ESQL-Ausdruck, der einen Wert zurückgibt.
Ausführliche Informationen zur EVAL-Anweisung finden Sie im Abschnitt EVAL-Anweisung.
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.
Benutzerdefinierte Funktionen können nicht innerhalb einer EVAL-Funktion definiert werden, mit EVAL kann jedoch eine benutzerdefinierte Funktion aufgerufen werden, die im Verwendungsbereich der EVAL-Funktion liegt.
IF (FALSE) THEN CALL function(<Parameter>) INTO Environment.temp; END IF;
Beachten Sie, dass im vorhergehenden Beispiel function() durch die benannte fragliche Funktion ersetzt werden muss.In den folgenden Beispielen sind A und B ganzzahlige Skalarvariablen, und 'skalarVar1' und 'OperatorAsString' sind Skalarvariablen einer Zeichenfolge.
Der Ausdruck A+B ist zulässig, obwohl er einen ganzzahligen Wert zurückgibt, da ganzzahlige Werte als Zeichenfolge repräsentiert werden können, und die notwendige Umsetzung durchgeführt wird, bevor EVAL mit dem zweiten Schritt der Auswertung beginnt.
Das Semikolon am Ende des abschließenden Zeichenfolgeliterals ist notwendig, da, falls EVAL anstelle einer ESQL-Anweisung verwendet wird, die erste Auswertung eine Zeichenfolge zurückgeben muss, die eine gültige ESQL-Anweisung, einschließlich des abschließenden Semikolons, repräsentiert.
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 ankommenden Nachrichtenfeldes 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, spezifischere, aber auch schnellere ESQL zu schreiben.
In diesem Beispiel wird EVAL nicht dazu verwendet, einen Ausdruck, sondern einen Feldverweis zu ersetzen.
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.
SET OutputRoot.XMLNS.Data.Result[]
= EVAL('(SELECT T.x FROM Database.y AS T)');