Die CREATE DBPROC[EDURE]-Anweisung (create_dbproc_statement) definiert eine Datenbankprozedur.
<create_dbproc_statement> ::= CREATE DBPROC[EDURE] <dbproc_name> [(<formal_parameter>,...)] [RETURNS CURSOR] AS <routine>
<formal_parameter>
::=
IN <argument> <data_type>
| OUT <argument> <data_type>
| INOUT <argument> <data_type>
<argument> ::= <identifier>
SQL-Tutorial, Datenbankprozeduren
Wenn im Datenbankprozedurnamen kein Schema angegeben ist, wird implizit das aktuelle Schema angenommen.
Die Datenbankprozedur wird dem implizit ermittelten oder dem explizit angegebenen Schema zugeordnet. Der aktuelle Benutzer muss das CREATEIN-Privileg für dieses Schema besitzen. Der Prozedurname muss sich von den Namen aller bereits im Schema existierenden Datenbankprozeduren unterscheiden.
Der aktuelle Benutzer ist der Eigentümer einer Datenbankprozedur. Er besitzt das EXECUTE-Privileg zur Ausführung der Datenbankprozedur.
Eine Anwendung tauscht beim Aufruf der Datenbankprozedur durch die CALL-Anweisung Daten über Parameter aus, die durch die formalen Parameter formal_parameter definiert werden. Einem formalen Parameter der Datenbankprozedur entspricht normalerweise eine Variable der Anwendung.
Der Modus des Parameters (IN | OUT | INOUT) legt fest, in welche Richtung die Daten beim Aufruf der Prozedur übergeben werden.
● IN: Durch IN wird ein Eingabeparameter definiert, d.h. beim Aufruf der Datenbankprozedur wird der Wert der Variablen an die Datenbankprozedur übertragen.
● OUT: Durch OUT wird ein Ausgabeparameter definiert, d.h. nach Beendigung der Prozedur wird der Wert des formalen Parameters aus der Datenbankprozedur an die Variable übertragen.
● INOUT: Durch INOUT wird ein Ein-/Ausgabeparameter definiert, der die Möglichkeiten von IN und OUT kombiniert.
Durch die Angabe eines Arguments argument wird einem formalen Parameter der Datenbankprozedur ein Name zugeordnet. Innerhalb der Datenbankprozedur kann der Parameter dann mit diesem Namen als Variable in Ausdrücken und Zuweisungen benutzt werden.
Als Datentyp data_type des formalen Parameters einer Datenbankprozedur sind nur die Datentypen BOOLEAN, CHAR[ACTER], DATE, FIXED, FLOAT, INT[EGER], NUMBER, REAL, SMALLINT, TIME, TIMESTAMP und VARCHAR zulässig.
Bei Angabe von RETURNS CURSOR wird eine Datenbankprozedur definiert, deren Aufruf eine Ergebnistabelle liefert.
Der Name dieser Tabelle wird durch die Systemvariable $CURSOR definiert. In der Datenbankprozedur muss deshalb eine Anweisung enthalten sein, die eine Ergebnistabelle mit dem Ergebnismengennamen $CURSOR erzeugt.
Der Wert von $CURSOR wird von den meisten Programmierspracheneinbettungen bereits vorgegeben, kann jedoch auch in der Datenbankprozedur explizit vergeben werden.
CREATE DBPROC
hotels_of_town (IN zip CHAR(5))
RETURNS CURSOR AS
$CURSOR = 'HOTEL_CURSOR';
DECLARE :$CURSOR CURSOR FOR
SELECT * FROM hotel.hotel WHERE zip = :zip;
Siehe auch: