CREATE [AGGREGATE] FUNCTIONfunction_name
RETURNS {STRING|INTEGER|REAL|DECIMAL} SONAMEshared_library_name
Mit benutzerdefinierten Funktionen (UDFs) können Sie MySQL um
neue Funktionen erweitern, die wie native (eingebaute)
MySQL-Funktionen wie etwa ABS()
oder
CONCAT()
funktionieren.
function_name
ist der Name, mit dem
die Funktion in SQL-Anweisungen aufgerufen wird. Die
RETURNS
-Klausel zeigt den Rückgabetyp der
Funktion an. DECIMAL
ist zwar hinter
RETURNS
zulässig, aber gegenwärtig geben
DECIMAL
-Funktionen String-Werte zurück und
sollten daher wie STRING
-Funktionen
geschrieben werden.
shared_library_name
ist der Basisname
der Shared Object-Datei, die den Code zur Implementierung der
Funktion enthält. Diese Datei muss im Plug-In-Verzeichnis
liegen, welches durch den Wert der Systemvariablen
plugin_dir
vorgegeben ist.
(Hinweis: Dies ist eine
Änderung in MySQL 5.1. In früheren Versionen von MySQL konnte
die Shared Object-Datei in jedem beliebigen Verzeichnis liegen,
das der dynamische Linker des Systems untersuchte.)
Zur Erstellung einer Funktion benötigen Sie das
INSERT
-Recht für die
mysql
-Datenbank, da CREATE
FUNCTION
in die Systemtabelle
mysql.func
eine Zeile mit dem Namen, Typ und
Shared Library-Namen der Funktion einfügt. Wenn diese Tabelle
bei Ihnen fehlt, müssen Sie sie mit dem Skript
mysql_fix_privilege_tables anlegen. Siehe
Abschnitt 5.6, „mysql_fix_privilege_tables — Upgrade von MySQL-Systemtabellen“.
Eine aktive Funktion ist eine Funktion, die mit CREATE
FUNCTION
geladen, aber nicht mit DROP
FUNCTION
wieder gelöscht wurde. Alle aktiven
Funktionen werden bei jedem Serverstart neu geladen, es sei
denn, Sie starten mysqld mit der Option
--skip-grant-tables
. In diesem Fall wird die
UDF-Initialisierung übersprungen und die UDFs stehen nicht zur
Verfügung.
Anleitungen zum Schreiben benutzerdefinierter Funktionen finden Sie unter Abschnitt 26.3.4, „Hinzufügen einer neuen benutzerdefinierten Funktion“. Damit der UDF-Mechanismus funktioniert, müssen die Funktionen in C oder C++ geschrieben sein, Ihr Betriebssystem muss dynamisches Laden unterstützen, und Sie müssen mysqld dynamisch (nicht statisch) kompiliert haben.
Eine AGGREGATE
-Funktion funktioniert genau
wie eine native MySQL-Aggregatfunktion (Summenfunktion), wie
beispielsweise SUM
oder
COUNT()
. Damit AGGREGATE
funktioniert, muss Ihre mysql.func
-Tabelle
eine type
-Spalte enthalten. Wenn Ihre
mysql.func
-Tabelle diese Spalte nicht hat,
müssen Sie sie mit dem Skript
mysql_fix_privilege_tables erzeugen.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.