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 Die Anweisung CREATE PROCEDURE 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.

Überlappende Prozeduren werden nicht unterstützt. (Eine überlappende Prozedur ist eine Prozedur, die denselben Namen hat wie eine andere Prozedur in demselben Datenbankschema, jedoch eine andere Anzahl an Parametern oder Parameter anderer Typen.) Wenn der Broker eine überlappende Prozedur feststellt, gibt er eine Ausnahmebedingung aus.

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

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";
Der Abschnitt Die Anweisung CREATE PROCEDURE enthält Beispiele gespeicherter Prozeduren in der Datenbank.

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'};

    Dadurch wird die Prozedur myProc1 in der Datenbank Schema2 aufgerufen, und das Standardschema "Benutzername" wird ü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, 2005 Letzte Aktualisierung: Nov 17, 2005
ac17040_