Nehmen Sie die vollständige neue Funktion in die ALTER FUNCTION-Anweisung auf.
Syntax 1
Die ALTER FUNCTION-Anweisung unterscheidet sich in der Syntax nur durch das erste Wort von der CREATE FUNCTION-Anweisung.
Mit ALTER FUNCTION bleiben bestehende Privilegien für die betreffende Funktion unverändert. Im Gegensatz dazu werden beim
Ausführen von DROP FUNCTION, gefolgt von CREATE FUNCTION, EXECUTE-Privilegien neu zugewiesen.
Syntax 2
Sie können SET HIDDEN verwenden, um die Definition der zugehörigen Funktion zu verschleiern und somit unlesbar zu machen.
Die Funktion kann aus Ihrer Datenbank entladen und in andere Datenbanken geladen werden.
Wenn SET HIDDEN verwendet wird, ist die Definition der Funktion bei der Fehlerbehandlung mit dem Debugger nicht zu sehen und
sie wird auch nicht in den Prozedurprofilen angezeigt.
Hinweis
Diese Einstellung ist irreversibel. Es wird dringend empfohlen, die ursprüngliche Funktionsdefinition außerhalb der Datenbank aufzubewahren.
Syntax 3
Verwenden Sie die RECOMPILE-Syntax, um eine benutzerdefinierte SQL-Funktion neu zu kompilieren. Wenn Sie eine Funktion
neu kompilieren, wird die im Katalog gespeicherte Definition neuerlich syntaktisch analysiert und die Syntax wird geprüft.
Die Quelle des Funktionscodes wird durch die Neukompilierung nicht verändert. Wenn Sie eine Funktion neu kompilieren, bleibt
die durch die SET HIDDEN-Klausel verschleierte Definition weiterhin verschleiert und unlesbar.
SQL/2008
Erweiterung des Herstellers. ALTER FUNCTION ist die optionale SQL-Sprachenfunktion F381 des SQL/2008-Standards. Im SQL-Standard
kann ALTER FUNCTION jedoch nicht dazu verwendet werden, eine PSM-Funktionsdefinition (Persistent Stored Module, beständiges
gespeichertes Modul) neu festzulegen. SQL/2008 umfasst keine Unterstützung für SET HIDDEN oder RECOMPILE.
In diesem Beispiel wird MyFunction erstellt und geändert. Mit der SET HIDDEN-Klausel wird die Funktionsdefinition verschleiert
und unlesbar. Um dieses Beispiel ausführen zu können, benötigen Sie auch das CREATE PROCEDURE-Systemprivileg, da eine Funktion
erstellt wird, bevor sie geändert wird.
CREATE FUNCTION MyFunction(
firstname CHAR(30),
lastname CHAR(30) )
RETURNS CHAR(61)
BEGIN
DECLARE name CHAR(61);
SET name = firstname || ' ' || lastname;
RETURN (name);
ALTER FUNCTION MyFunction SET HIDDEN;
END;