Anfang des Inhaltsbereichs

CREATE FUNCTION-Anweisung (create_function_statement) 

Die CREATE FUNCTION-Anweisung (create_function_statement) definiert eine Datenbankfunktion.

Syntax

<create_function_statement> ::= CREATE FUNCTION <dbfunction_name> [(<formal_parameter1>,..)] RETURNS <data_type> AS <routine>

<formal_parameter1> ::= <argument1> <data_type>
<argument1> ::= <identifier>

dbfunction_name, data_type, routine, identifier

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

CREATE FUNCTION avg_price (zip CHAR(5)) RETURNS FIXED(6,2) AS
    VAR summe FIXED(10,2); price FIXED(6,2);
    hotels INTEGER; avg_price FIXED(6,2);
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 RETURN sum/hotels
ELSE RETURN NULL;

Erläuterung

Der aktuelle Benutzer ist der Eigentümer einer Datenbankfunktion. Er besitzt das Recht zur Ausführung der Datenbankfunktion und zur Weitergabe des Ausführungsrechtes.

Argument

Durch die Angabe eines Arguments (argument1) wird einem formalen Parameter der Datenbankfunktion ein Name zugeordnet. Innerhalb der Datenbankfunktion 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 Datenbankfunktion sind nur die Datentypen BOOLEAN, CHAR[ACTER], DATE, FIXED, FLOAT, INT[EGER], NUMBER, REAL, SMALLINT, TIME, TIMESTAMP und VARCHAR zulässig.

RETURNS

Als Datentyp des Rückgabewertes sind nur die Typen BOOLEAN, CHAR[ACTER], DATE, DEC[IMAL], DOUBLE, FLOAT, INT[EGER], NUMBER, NUMERIC, REAL, SMALLINT,TIME, TIMESTAMP und VARCHAR zulässig.

Datentypen

Datentypen werden nomalerweise mit Länge und Genauigkeit definiert. Bei Angabe von VARCHAR bzw. NUMBER ohne Länge bzw. Genauigkeit leitet das Datenbanksystem diese jedoch automatisch abhängig vom Kontext des Funktionsaufrufes ab.

Ende des Inhaltsbereichs