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.

CALL-Anweisung zum Aufrufen einer benutzerdefinierten Routine verwenden

Durch die ESQL CALL-Anweisung werden Routinen aufgerufen, die auf unterschiedliche Weise erstellt und implementiert wurden.

Eine Routine ist eine benutzerdefinierte Funktion oder Prozedur, die durch eine der folgenden Anweisungen definiert ist:
  • CREATE FUNCTION
  • CREATE PROCEDURE
Mit der CALL-Anweisung können Sie eine Routine aufrufen, die auf eine der folgenden Arten implementiert wurde:
  • ESQL
  • Java™
  • Als gespeicherte Prozedur in einer Datenbank
  • Als integrierte (vom Broker bereitgestellte) Funktion

    Zum Aufrufen von integrierten (vom Broker bereitgestellten) Funktionen und benutzerdefinierten SQL-Funktionen können Sie eine CALL-Anweisung verwenden, normalerweise würden Sie deren Namen aber direkt in Ausdrücken eingeben.

Weitere Einzelheiten zu der Syntax und den Parametern der CALL-Anweisung finden Sie unter CALL-Anweisung. Ein Beispiel zur Verwendung der CALL-Anweisung finden Sie in den Beispielen zur CREATE PROCEDURE-Anweisung.

ESQL-Routine aufrufen

Eine Routine wird als ESQL-Methode aufgerufen, wenn die Definition der Routine eine LANGUAGE-Klausel in ESQL angibt oder wenn es sich bei der Routine um eine integrierte Funktion handelt. Zwischen der Definition und der CALL-Anweisung ist ein exakter 1:1-Abgleich der Datentypen und Richtungen jedes Parameters erforderlich. Eine ESQL-Routine darf jeden ESQL-Datentyp zurückgeben, mit Ausnahme der Typen "Liste" und "Zeile".

Java-Routine aufrufen

Eine Routine wird als Java-Methode aufgerufen, wenn die Definition der Routine eine LANGUAGE-Klausel in JAVA angibt. Zwischen der Definition und der CALL-Anweisung ist ein exakter 1:1-Abgleich der Datentypen und Richtungen jedes Parameters erforderlich. Wenn die Java-Methode einen typenlosen Rückgabetyp besitzt, können Sie die INTO-Klausel nicht verwenden, da es keinen Wert gibt, der zurückgegeben werden kann.

Eine Java-Routine kann jeden Datentyp in der Tabelle für die Zuordnung von ESQL- zu Java-Datentypen zurückgeben, mit Ausnahme von 'Liste' und 'Zeile'.

Eine in einer Datenbank gespeicherte Prozedur aufrufen

Eine Routine wird als in einer Datenbank gespeicherte Prozedur aufgerufen, wenn die Definition der Routine die LANGUAGE-Klausel DATABASE (Datenbank) enthält.

Bei einem Aufruf an eine in einer Datenbank gespeicherte Prozedur sucht der Broker eine durch eine CREATE PROCEDURE-Anweisung erstellte Definition, die mit dem lokalen Namen der Prozedur übereinstimmt. Dann verwendet der Broker die folgende Sequenz, um den Namen der Prozedur in der zugehörigen Datenbank und im Datenbankschema zu ermitteln:

  1. Wenn die Anweisung CALL eine IN-Klausel angibt, wird der Name der Datenquelle, des Datenbankschemas oder von beiden aus der IN-Klausel übernommen.
  2. Wenn der Name der Datenquelle nicht durch eine IN-Klausel in der Anweisung CALL bereitgestellt wird, wird er aus dem Attribut DATASOURCE des Knotens übernommen.
  3. Wenn das Datenbankschema nicht durch eine IN-Klausel in der Anweisung CALL bereitgestellt wird, jedoch in der Klausel EXTERNAL NAME der Anweisung CREATE PROCEDURE angegeben ist, wird der Name von der Klausel EXTERNAL NAME übernommen.
  4. Wenn in der Klausel EXTERNAL NAME der Anweisung CREATE PROCEDURE kein Datenbankschema angegeben ist, wird der Benutzername der Datenbank als Schemaname verwendet. Wird eine entsprechende Prozedur gefunden, wird die Routine aufgerufen.

Die IN-Klausel der Anweisung CALL wird hauptsächlich verwendet, damit die Datenquelle, das Datenbankschema oder beide während der Ausführung dynamisch ausgewählt werden können. (Die Klausel EXTERNAL SCHEMA ermöglicht auch die dynamische Auswahl des Datenbankschemas, das die gespeicherte Prozedur enthält; die IN-Klausel ist jedoch flexibler als die Klausel EXTERNAL SCHEMA, die deshalb nur zur Abwärtskompatibilität beibehalten wird. In neuen Anwendungen wird sie nicht weiter unterstützt.)

Wenn die aufgerufene Routine in ihrer Definition DYNAMIC RESULT SETS (dynamische Ergebnissätze) angibt, muss die Anzahl der Ausdrücke in der ParameterList-Variablen der CALL-Anweisung der Anzahl der Parameter in der Routine plus der Anzahl der DYNAMIC RESULT SETS (dynamischen Ergebnissätze) entsprechen. Wenn die Routine z. B. drei Parameter und zwei DYNAMIC RESULT SETS (dynamische Ergebnissätze) enthält, muss die CALL-Anweisung fünf Parameter an die aufgerufene Routine weiterleiten. Die für die beiden DYNAMIC RESULT SETS (dynamischen Ergebnissätze) weitergeleiteten Parameter müssen Listenparameter sein, d. h., es muss sich dabei um Feldreferenzen handeln, die mit Array-Klammern [ ] qualifiziert sind (z. B. Environment.ResultSet1[]).

Eine in einer Datenbank gespeicherte Prozedur darf jeden ESQL-Datentyp zurückgeben, mit Ausnahme der Typen "Intervall", "Liste" und "Zeile".

Bemerkungen | Marken | Downloads | Bibliothek | Support | Feedback

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

        
        Letzte Aktualisierung:
        
        Letzte Aktualisierung: 2015-02-28 16:19:56


TaskthemaTaskthema | Version 8.0.0.5 | ac06009_