Wer kann eine Funktion erstellen?
Die CREATE FUNCTION
-Anweisung kann ausgeführt werden durch:
-
Benutzer mit dem Privileg `CREATE FUNCTION`TION
Der Benutzer, der die gespeicherte Funktion erstellt hat, wird deren Eigentümer.
Die CREATE FUNCTION
-Anweisung kann ausgeführt werden durch:
Benutzer mit dem Privileg `CREATE FUNCTION`TION
Der Benutzer, der die gespeicherte Funktion erstellt hat, wird deren Eigentümer.
CREATE FUNCTION
-BeispieleErstellen einer gespeicherten Funktion
CREATE FUNCTION ADD_INT (A INT, B INT DEFAULT 0)
RETURNS INT
AS
BEGIN
RETURN A + B;
END
Aufruf einer Auswahl:
SELECT ADD_INT(2, 3) AS R FROM RDB$DATABASE
Aufruf innerhalb von PSQL-Code, der zweite optionale Parameter wird nicht angegeben:
MY_VAR = ADD_INT(A);
Erstellen einer deterministischen gespeicherten Funktion
CREATE FUNCTION FN_E()
RETURNS DOUBLE PRECISION DETERMINISTIC
AS
BEGIN
RETURN EXP(1);
END
Erstellen einer gespeicherten Funktion mit Parametern vom Typ Tabellenspalte
Gibt den Namen eines Typs nach Feldname und Wert zurück
CREATE FUNCTION GET_MNEMONIC (
AFIELD_NAME TYPE OF COLUMN RDB$TYPES.RDB$FIELD_NAME,
ATYPE TYPE OF COLUMN RDB$TYPES.RDB$TYPE)
RETURNS TYPE OF COLUMN RDB$TYPES.RDB$TYPE_NAME
AS
BEGIN
RETURN (SELECT RDB$TYPE_NAME
FROM RDB$TYPES
WHERE RDB$FIELD_NAME = :AFIELD_NAME
AND RDB$TYPE = :ATYPE);
END
Erstellen einer extern gespeicherten Funktion
Erstellen Sie eine Funktion, die sich in einem externen Modul (UDR) befindet.Die Funktionsimplementierung befindet sich im externen Modul udrcpp_example
.Der Name der Funktion innerhalb des Moduls ist wait_event
.
CREATE FUNCTION wait_event (
event_name varchar (31) CHARACTER SET ascii
) RETURNS INTEGER
EXTERNAL NAME 'udrcpp_example!Wait_event'
ENGINE udr
Erstellen einer gespeicherten Funktion mit einer Unterfunktion
Erstellen einer Funktion zum Konvertieren einer Zahl in das Hexadezimalformat.
CREATE FUNCTION INT_TO_HEX (
ANumber BIGINT ,
AByte_Per_Number SMALLINT = 8)
RETURNS CHAR (66)
AS
DECLARE VARIABLE xMod SMALLINT ;
DECLARE VARIABLE xResult VARCHAR (64);
DECLARE FUNCTION TO_HEX (ANum SMALLINT ) RETURNS CHAR
AS
BEGIN
RETURN CASE ANum
WHEN 0 THEN '0'
WHEN 1 THEN '1'
WHEN 2 THEN '2'
WHEN 3 THEN '3'
WHEN 4 THEN '4'
WHEN 5 THEN '5'
WHEN 6 THEN '6'
WHEN 7 THEN '7'
WHEN 8 THEN '8'
WHEN 9 THEN '9'
WHEN 10 THEN 'A'
WHEN 11 THEN 'B'
WHEN 12 THEN 'C'
WHEN 13 THEN 'D'
WHEN 14 THEN 'E'
WHEN 15 THEN 'F'
ELSE NULL
END;
END
BEGIN
xMod = MOD (ANumber, 16);
ANumber = ANumber / 16;
xResult = TO_HEX (xMod);
WHILE (ANUMBER> 0) DO
BEGIN
xMod = MOD (ANumber, 16);
ANumber = ANumber / 16;
xResult = TO_HEX (xMod) || xResult;
END
RETURN '0x' || LPAD (xResult, AByte_Per_Number * 2, '0' );
END
Wenn DEFINER
für die Funktion f
gesetzt ist, benötigt der Benutzer US
nur das EXECUTE
-Privileg auf f
.Wenn es auf INVOKER
gesetzt wäre, würde der Benutzer auch das INSERT
-Privileg für die Tabelle t
benötigen.
set term ^;
create function f (i integer) returns int SQL SECURITY DEFINER
as
begin
insert into t values (:i);
return i + 1;
end^
set term ;^
grant execute on function f to user us;
commit;
connect 'localhost:/tmp/59.fdb' user us password 'pas';
select f(3) from rdb$database;
ALTER FUNCTION
Ändern einer vorhandenen gespeicherten Funktion
DSQL
ALTER FUNCTION funcname
[ ( [ <in_params> ] ) ]
RETURNS <domain_or_non_array_type> [COLLATE collation]
[DETERMINISTIC]
{<psql_function> | <external-module-body>}
!! Vgl. Syntax CREATE FUNCTION
für weitere Regeln !!
Die ALTER FUNCTION
-Anweisung erlaubt die folgenden Änderungen an einer gespeicherten Funktionsdefinition:
der Satz und die Eigenschaften des Eingangs- und Ausgangstyps
lokale Variablen, benannte Cursor und Unterprogramme
Code im Hauptteil der gespeicherten Prozedur
Für externe Funktionen (UDR) können Sie den Einstiegspunkt und den Engine-Namen ändern.Für ältere externe Funktionen, die mit DECLARE EXTERNAL FUNCTION
deklariert wurden – auch als UDFs bekannt – ist es nicht möglich, in PSQL zu konvertieren und umgekehrt.
Nachdem ALTER FUNCTION
ausgeführt wurde, bleiben bestehende Privilegien intakt und Abhängigkeiten werden nicht beeinflusst.
Das Ändern einer Funktion ohne Angabe der SQL SECURITY
-Klausel entfernt die SQL-Sicherheitseigenschaft, wenn sie derzeit für diese Funktion festgelegt ist.Dies bedeutet, dass das Verhalten auf den Datenbankstandard zurückgesetzt wird.
Caution
|
Achten Sie darauf, die Anzahl und den Typ der Eingabeparameter und den Ausgabetyp einer gespeicherten Funktion zu ändern.Vorhandener Anwendungscode und Prozeduren, Funktionen und Trigger, die ihn aufrufen, könnten ungültig werden, weil die neue Beschreibung der Parameter nicht mit dem alten Aufrufformat kompatibel ist.Informationen zur Fehlerbehebung in einer solchen Situation finden Sie im Artikel Das |
Die ALTER FUNCTION
-Anweisung kann ausgeführt werden durch:
Inhaber der gespeicherten Funktion
Benutzer mit der Berechtigung ALTER ANY FUNCTION
ALTER FUNCTION
ALTER FUNCTION ADD_INT(A INT, B INT, C INT)
RETURNS INT
AS
BEGIN
RETURN A + B + C;
END
CREATE OR ALTER FUNCTION
Erstellen einer neuen oder Ändern einer vorhandenen gespeicherten Funktion
DSQL
CREATE OR ALTER FUNCTION funcname
[ ( [ <in_params> ] ) ]
RETURNS <domain_or_non_array_type> [COLLATE collation]
[DETERMINISTIC]
{<psql_function> | <external-module-body>}
!! Vgl. Syntax CREATE FUNCTION
für weitere Regeln !!
Die Anweisung CREATE OR ALTER FUNCTION
erstellt eine neue gespeicherte Funktion oder ändert eine vorhandene.Wenn die gespeicherte Funktion nicht existiert, wird sie durch transparentes Aufrufen einer CREATE FUNCTION
-Anweisung erstellt.Wenn die Funktion bereits existiert, wird sie geändert und kompiliert (durch ALTER FUNCTION
), ohne ihre bestehenden Privilegien und Abhängigkeiten zu beeinträchtigen.
CREATE OR ALTER FUNCTION
CREATE OR ALTER FUNCTION ADD_INT(A INT, B INT DEFAULT 0) RETURNS INT AS BEGIN RETURN A + B; END
DROP FUNCTION
Löschen einer gespeicherten Funktion
DSQL
DROP FUNCTION funcname
Parameter | Beschreibung |
---|---|
funcname |
Name der gespeicherten Funktion.Die maximale Länge beträgt 63 Zeichen.Muss unter allen Funktionsnamen in der Datenbank eindeutig sein. |
Die DROP FUNCTION
-Anweisung löscht eine vorhandene gespeicherte Funktion.Wenn die gespeicherte Funktion Abhängigkeiten aufweist, schlägt der Versuch, sie zu löschen, fehl und der entsprechende Fehler wird ausgegeben.
Die DROP FUNCTION
-Anweisung kann ausgeführt werden durch:
Inhaber der gespeicherten Funktion
Benutzer mit dem Privileg DROP ANY FUNCTION
DROP FUNCTION
DROP FUNCTION ADD_INT;
RECREATE FUNCTION
Erstellen einer neuen gespeicherten Funktion oder Neuerstellen einer vorhandenen Funktion
DSQL
RECREATE FUNCTION funcname
[ ( [ <in_params> ] ) ]
RETURNS <domain_or_non_array_type> [COLLATE collation]
[DETERMINISTIC]
{<psql_function> | <external-module-body>}
!! Vgl. Syntax CREATE FUNCTION
für weitere Regeln !!
Die Anweisung 'RECREATE FUNCTION' erstellt eine neue gespeicherte Funktion oder erstellt eine vorhandene neu.Wenn es bereits eine Funktion mit diesem Namen gibt, versucht die Engine, sie zu löschen und dann eine neue zu erstellen.Das Neuerstellen einer vorhandenen Funktion schlägt bei COMMIT
fehl, wenn die Funktion Abhängigkeiten hat.
Note
|
Beachten Sie, dass Abhängigkeitsfehler erst in der |
Nachdem eine Prozedur erfolgreich neu erstellt wurde, werden vorhandene Berechtigungen zum Ausführen der gespeicherten Funktion und derBerechtigungen der gespeicherten Funktion selbst werden verworfen.
RECREATE FUNCTION
RECREATE FUNCTION ADD_INT(A INT, B INT DEFAULT 0)
RETURNS INT
AS
BEGIN
RETURN A + B;
EN