Die CREATE FUNCTION-Anweisung (create_function_statement) definiert eine Datenbankfunktion.
<create_function_statement> ::= CREATE [PUBLIC] FUNCTION <dbfunction_name> [(<formal_parameter1>,..)] RETURNS <data_type> [DETERMINISTIC] AS <routine>
<formal_parameter1>
::= <argument1> <data_type>
<argument1> ::= <identifier>
SQL-Tutorial, Datenbankfunktionen
Wenn im Datenbankfunktionsnamen kein Schema angegeben ist, wird implizit das aktuelle Schema angenommen.
Die Datenbankfunktion wird dem implizit ermittelten oder dem explizit angegebenen Schema zugeordnet. Der aktuelle Benutzer muss das CREATEIN-Privileg für dieses Schema besitzen. Der Funktionsname muss sich von den Namen aller bereits im Schema existierenden Datenbankfunktionen unterscheiden.
Der aktuelle Benutzer ist der Eigentümer einer Datenbankfunktion. Er besitzt das EXECUTE-Privileg zur Ausführung der Datenbankfunktion und zur Weitergabe des Ausführungsrechtes.
Wenn in der Datenbankfunktion eine Ergebnistabelle erzeugt wird, dann muss sich deren Name vom Ergebnistabellennamen der aufrufenden SQL-Anweisung unterscheiden.
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.
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.
Datentypen werden nomalerweise mit Länge und Genauigkeit definiert. Bei Verwenden von VARCHAR bzw. NUMBER werden Länge bzw. Genauigkeit nicht angegeben. In diesen Fällen leitet das Datenbanksystem Länge bzw. Genauigkeit automatisch abhängig vom Kontext des Funktionsaufrufs ab.
Bei Angabe von PUBLIC wird eine globale Datenbankfunktion erzeugt, die ohne Angabe eines Schemanamens aufgerufen werden kann. Der Funktionsname darf in diesem Fall keinen Schemanamen enthalten und er darf nicht mit dem Namen einer weiteren globalen Datenbankfunktion übereinstimmen.
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.
Bei Angabe von DETERMINISTIC wird zugesichert, dass die Funktion ein deterministisches Verhalten besitzt. Dies bedeutet, dass bei gleichen Eingabewerten immer der gleiche Rückgabewert geliefert wird.
Die Angabe von DETERMINISTIC ist zwingend erforderlich, wenn Sie die Funktion zur Erzeugung eines Funktionsindex nutzen wollen.