Anfang des Inhaltsbereichs

CREATE DBPROC-Anweisung (create_dbproc_statement) 

Die CREATE DBPROC-Anweisung (create_dbproc_statement) definiert eine Datenbankprozedur.

Syntax

<create_dbproc_statement> ::= CREATE DBPROC <procedure_name> [(<formal_parameter>,..)] [RETURNS CURSOR] AS <routine>

<formal_parameter> ::=
  IN <argument> <data_type>
| OUT <argument> <data_type>
| INOUT <argument> <data_type>

<argument> ::= <identifier>

procedure_name, data_type, identifier, routine

Die Datenbankprozedur bestimmt den durchschnittlichen Preis für Einzelzimmer in Hotels, die im angegebenen Postleitzahlenbereich liegen.

CREATE DBPROC avg_price (IN zip CHAR(5), OUT avg_price FIXED(6,2)) AS
    VAR sum FIXED(10,2); price FIXED(6,2); hotels INTEGER;
TRY
  SET sum = 0; SET hotels = 0;
  SELECT price FROM travel.room,travel.hotel WHERE zip = :zip AND
  room.hno = hotel.hno AND roomtype = 'SINGLE';
    WHILE $rc = 0 DO BEGIN
      FETCH INTO :price;
      SET sum = sum + price;
      SET hotels = hotels + 1;
    END;
CATCH
  IF $rc <> 100 THEN STOP ($rc, 'unexpected error');
  IF hotels > 0 THEN SET avg_price = sum / hotels
  ELSE STOP (100, 'no hotel found');

Erläuterung

Der aktuelle Benutzer ist der Eigentümer einer Datenbankprozedur. Er besitzt das EXECUTE-Privileg zur Ausführung der Prozedur.

Parameter

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 Applikation.

IN | OUT | INOUT

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.

Argument

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.

Datentyp

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.

RETURNS CURSOR

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 travel.hotel WHERE zip = :zip;

Ende des Inhaltsbereichs