Die CREATE FUNCTION-Anweisung (create_function_statement) definiert eine Datenbankfunktion.
<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;
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.