CALL-Anweisung zum Aufrufen einer benutzerdefinierten Routine verwenden

Durch die Anweisung ESQL CALL wird eine Routine aufgerufen. Eine Routine ist eine benutzerdefinierte Funktion oder Prozedur, die durch eines der folgenden Elemente definiert ist:
  • eine CREATE FUNCTION-Anweisung
  • eine CREATE PROCEDURE-Anweisung
Anmerkung: Wie bei benutzerdefinierten Funktionen und Prozeduren auch, können Sie mit der CALL-Anweisung integrierte (vom Broker bereitgestellte) Funktionen und benutzerdefinierte SQL-Funktionen aufrufen. Normalerweise werden diese Funktionen jedoch aufgerufen, indem ihre Namen in Ausdrücken verwenden werden.
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 (Beachten Sie jedoch den Hinweis oben zum Aufrufen integrierter Funktionen.)

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.

Eine EQSL-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 muss ein exakter 1:1-Abgleich der Datentypen und Richtungen jedes Parameters stattfinden.

Eine ESQL-Routine darf jeden ESQL-Datentyp zurückgeben, mit Ausnahme der Typen "Liste" und "Zeile".

Eine 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 muss ein exakter 1:1-Abgleich der Datentypen und Richtungen jedes Parameters stattfinden.

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. Ausnahmen bilden jedoch die Typen "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.
Anmerkung: Sowohl die IN-Klausel der Anweisung CALL als auch die Klausel EXTERNAL SCHEMA ermöglichen 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 tatsächlichen 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".

Zugehörige Konzepte
Übersicht zu ESQL
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
ac06009_