Gespeicherte Prozeduren aufrufen

Verwenden Sie die ESQL-Anweisung CALL, um eine Prozedur aufzurufen, die in einer Datenbank gespeichert ist. Die gespeicherte Prozedur muss durch eine CREATE PROCEDURE-Anweisung mit folgenden Elementen definiert sein:
  • Die LANGUAGE-Klausel DATABASE
  • Eine EXTERNAL NAME-Klausel, die den Namen der Prozedur in der Datenbank und (optional) das zugehörige Datenbankschema angibt.

Wenn Sie mit der CALL-Anweisung eine gespeicherte Prozedur aufrufen, vergewissert sich der Broker, dass die ESQL-Definition und die Datenbankdefinition übereinstimmen:

Die folgenden Einschränkungen gelten für die Verwendung gespeicherter Prozeduren:

Eine gespeicherte Prozedur in ESQL erstellen

Wenn Sie eine ESQL-Prozedur definieren, die einer gespeicherten Datenbankprozedur entspricht, können Sie entweder einen qualifizierten Namen (als Qualifikationsmerkmal wird ein Datenbankschema verwendet) oder einen nicht qualifizierten Namen angeben.

Gehen Sie folgendermaßen vor, um eine gespeicherte Prozedur zu erstellen:

  1. Codieren Sie ähnlich wie in folgendem Beispiel eine Anweisung zur Erstellung einer nicht qualifizierten Prozedur:
    CREATE PROCEDURE myProc1(IN p1 CHAR) LANGUAGE DATABASE EXTERNAL NAME "myProc";

    Der von Ihnen angegebene EXTERNAL NAME muss der Definition entsprechen, die Sie in der Datenbank erstellt haben, Sie können jedoch einen Namen Ihrer Wahl für die entsprechende ESQL-Prozedur angeben.

  2. Codieren Sie ähnlich wie in folgendem Beispiel eine Anweisung zur Erstellung einer qualifizierten Prozedur:
    CREATE PROCEDURE myProc2(IN p1 CHAR) LANGUAGE DATABASE EXTERNAL NAME "Schema1.myProc";
  3. Codieren Sie ähnlich wie in folgendem Beispiel eine Anweisung zur Erstellung einer qualifizierten Prozedur in einem Oracle-Paket:
    CREATE PROCEDURE myProc3(IN p1 CHAR) LANGUAGE DATABASE EXTERNAL NAME "mySchema.myPackage.myProc";
Beispiele zu gespeicherten Prozedurdefinitionen in der Datenbank finden Sie in der CREATE PROCEDURE-Anweisung.

Gespeicherte Prozedur aufrufen

  1. Codieren Sie ähnlich wie in folgendem Beispiel eine Anweisung zum Aufrufen einer nicht qualifizierten Prozedur:
    CALL myProc1('HelloWorld');

    Da die Prozedur myProc1 nicht ausdrücklich für die Zugehörigkeit zu einem Schema definiert wurde, muss Sie im Standardschema (dessen Name der Benutzername ist, mit dem die Datenquelle verbunden wird) vorhanden sein; andernfalls wird ein Fehlschlagen des Befehls verursacht.

  2. Das folgende Beispiel ruft die Prozedur myProc im Schema Schema1 auf.
    CALL myProc2('HelloWorld');
  3. Codieren Sie ähnlich wie in folgendem Beispiel eine Anweisung zum Aufruf einer nicht qualifizierten Prozedur mit einem dynamischen Schema:
    DECLARE Schema2 char 'mySchema2';
    CALL myProc1('HelloWorld') IN Database.{'Schema2'};

    Mit dieser Anweisung wird die Prozedur myProc1 in der Datenbank Schema2 aufgerufen und dabei das Standardschema "Benutzername" überschrieben.

Gespeicherte Prozedur aufrufen, die zwei unterschiedliche Ergebnislisten zurückgibt

Gehen Sie folgendermaßen vor, um eine gespeicherte Prozedur aufzurufen, die einen Eingabeparameter benötigt und einen Ausgabeparameter sowie zwei Ergebnisse zurückgibt:
  1. Definieren Sie die Prozedur mit einer CREATE PROCEDURE-Anweisung, durch die ein Eingabeparameter, ein Ausgabeparameter und zwei Ergebnisse angegeben werden:
    CREATE PROCEDURE myProc1 (IN P1 INT, OUT P2 INT)
      LANGUAGE DATABASE
      	DYNAMIC RESULT SETS 2
      EXTERNAL NAME "myschema.myproc1";
  2. Zum Aufrufen der Prozedur myProc1 mit Hilfe eines Feldverweises verwenden Sie folgenden Code:
    /* using a field reference */
    CALL myProc1(InVar1, OutVar2, Environment.ResultSet1[], OutputRoot.XML.Test.ResultSet2[]);
  3. Zum Aufrufen der Prozedur myProc1 mit Hilfe einer Referenzvariable verwenden Sie folgenden Code:
    /* using a reference variable*/
    DECLARE cursor REFERENCE TO OutputRoot.XML.Test;
    
    CALL myProc1(InVar1, cursor.OutVar2, cursor.ResultSet1[], cursor.ResultSet2[]);
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
ac17040_