WebSphere Message Broker Version 8.0.0.5 Betriebssysteme: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Sehen Sie sich die Informationen zur aktuellen Produktversion im IBM Integration Bus Version 9.0 an.

EVAL-Anweisung

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

Ausführliche Informationen zur EVAL-Funktion finden Sie im Abschnitt EVAL-Funktion.

Syntax

Syntaxdiagramm lesenSyntaxdiagramm überspringen
>>-EVAL--( SQL-Zeichenwert )-----------------------------------><

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 dieser erste Schritt der Auswertung beendet wurde, hängt das Verhalten von EVAL hängt davon ab, ob sie 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 Auswertung hervorgegangen ist, so verarbeitet, 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.

Benutzerdefinierte Prozeduren können nicht innerhalb einer EVAL-Anweisung definiert werden, mit EVAL kann jedoch eine benutzerdefinierte Prozedur aufgerufen werden, die im Verwendungsbereich der EVAL-Anweisung liegt.

Wenn Sie mit der EVAL-Anweisung einen Senderuf an eine benutzerdefinierte Prozedur ausgeben, die von keiner anderen Stelle im ESQL-Code für einen bestimmten Knoten aufgerufen wird, müssen Sie Ihrem ESQL-Code folgenden Code hinzufügen, um sicherzustellen, dass die aufgerufene benutzerdefinierte Prozedur in die Kompilierung des Codes eingeschlossen wird.
   IF (FALSE) THEN CALL procedure(<Parameter>); END IF;
Beachten Sie, dass im vorhergehenden Code procedure() durch die benannte fragliche Prozedur ersetzt werden muss.

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.XMLNS.Data.Result = EVAL(A+B);

    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.

  • SET OutputRoot.XMLNS.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 Auswertung eine Zeichenfolge zurückgeben muss, die eine gültige ESQL-Anweisung, einschließlich des abschließenden Semikolons, repräsentiert.

Variablen, die in einer EVAL-Anweisung deklariert wurden, gibt es außerhalb dieser EVAL-Anweisung nicht.

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 verarbeitet 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 Verarbeitung von Anweisungen oder Ausdrücken ist zwangsläufig zeitaufwändiger als die einfache Verarbeitung von vorgefertigten Elementen. Wenn es auf Leistung ankommt, werden Sie es unter Umständen bevorzugen, spezifischere, aber auch schnellere ESQL 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 einen Feldverweis zu ersetzen.

  • SET OutputRoot.XMLNS.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.XMLNS.Data.Result[]
 = EVAL('(SELECT T.x FROM Database.y AS T)');

Funktionen, auf die nur in einer EVAL-Anweisung verwiesen wird und nicht im übrigen Teil des ESQL-Moduls, werden möglicherweise nicht in die BAR-Datei integriert. In den folgenden Beispielen muss auf die Funktion 'MyFunction' an einer anderen Stelle im ESQL-Modul verwiesen werden, andernfalls kann die Implementierung der BAR-Datei fehlschlagen.

EVAL('CALL MyFunction(parm1, parm2);');
DECLARE functionName CHARACTER 'Function';
DECLARE callStmt CHARACTER 'CALL My' || functionName || '(parm1, parm2);';
EVAL(callStmt);
Bemerkungen | Marken | Downloads | Bibliothek | Support | Feedback

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        Letzte Aktualisierung:
        
        Letzte Aktualisierung: 2015-02-28 16:21:30


ReferenzthemaReferenzthema | Version 8.0.0.5 | ak05020_