Durch die ESQL CALL-Anweisung werden Routinen aufgerufen, die auf unterschiedliche Weise erstellt und implementiert wurden.
(Obwohl Sie mit einer CALL-Anweisung integrierte (vom Broker bereitgestellte) Funktionen und benutzerdefinierte SQL-Funktionen aufrufen, können, verwenden Sie in den Ausdrücken die entsprechenden Namen normalerweise direkt.)
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 Anweisung CREATE PROCEDURE.
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".
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. Ausnahmen bilden jedoch die Typen "Liste" und "Zeile".
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:
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 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".