Dateien, die UDFs implementieren, müssen auf dem Serverhost
          kompiliert und installert werden. Dies wird weiter unten für
          die Beispiel-UDF-Datei sql/udf_example.cc
          aus der MySQL-Quelldistribution beschrieben.
        
Die nachfolgenden Instruktionen gelten für Unix. Anleitungen für Windows finden Sie weiter unten in diesem Abschnitt.
          Die Datei udf_example.cc enthält die
          folgenden Funktionen:
        
              Die Funktion metaphon() gibt einen
              Metaphon-String aus dem String-Argument zurück. Dieser
              ist so etwas wie ein Soundex-String, allerdings besser auf
              die englische Sprache zugeschnitten.
            
              Die Funktion myfunc_double() gibt die
              Summe der ASCII-Werte der in ihren Argumenten enthaltenen
              Zeichen geteilt durch die Summe der Längen dieser
              Argumente zurück.
            
              Die Funktion myfunc_int() gibt die
              Summe der Längen ihrer Argumente zurück.
            
              Die Funktion sequence([const int]) gibt
              eine Sequenz zurück, die ab der gegebenen Zahl oder, wenn
              keine gegeben wurde, ab 1 beginnt.
            
              Die Funktion lookup() gibt die
              IP-Nummer eines Hostnamens zurück.
            
              Die Funktion reverse_lookup() gibt den
              Hostnamen zu einer IP-Nummer zurück. Diese Funktion kann
              entweder mit einem einzigen String-Argument der Form
              'xxx.xxx.xxx.xxx' oder mit vier Zahlen
              aufgerufen werden.
            
Eine Datei, die dynamisch zu laden sein soll, sollte als Sharable Object-Datei mit einem Befehl wie diesem kompiliert werden:
shell> gcc -shared -o udf_example.so udf_example.cc
          Wenn Sie gcc benutzen, müsste sich
          udf_example.so auch mit einem einfacheren
          Befehl anlegen lassen:
        
shell> make udf_example.so
          Die richtigen Compiler-Optionen für Ihr System finden Sie
          einfach heraus, indem Sie folgenden Befehl im
          sql-Verzeichnis Ihres MySQL-Quellbaums
          laufen lassen:
        
shell> make udf_example.o
          Sie sollten einen ähnlichen Compile-Befehl geben, wie ihn
          make anzeigt, allerdings ohne die Option
          -c am Zeilenende. Stattdessen fügen Sie die
          Option -o udf_example.so hinzu. (Auf manchen
          Systemen müssen Sie eventuell die Option -c
          im Befehl beibehalten.)
        
          Nachdem Sie ein Shared Object für UDFs kompiliert haben,
          müssen Sie es installieren und MySQL mitteilen, dass es da
          ist. Wenn Sie ein Shared Object aus
          udf_example.cc kompilieren, entsteht eine
          Datei, die ungefähr udf_example.so
          heißt (der genaue Name ist plattformabhängig). Diese Datei
          kopieren Sie in das Plug-In-Verzeichnis des Servers, das Sie
          anhand der Systemvariablen plugin_dir
          herausfinden können.
          (Hinweis: Dies ist eine
          Änderung in MySQL 5.1. In früheren Versionen von MySQL
          konnte das Shared Object in jedem Verzeichnis liegen, das der
          dynamische Linker Ihres Systems untersuchte.)
        
          Auf manchen Systemen erkennt das Programm
          ldconfig, das den dynamischen Linker
          konfiguriert, ein Shared Object nur dann, wenn sein Name mit
          lib anfängt. In solchen Fällen sollten
          Sie eine Datei wie udf_example.so in
          libudf_example.so umbenennen.
        
Auf Windows können Sie benutzerdefinierte Funktionen wie folgt kompilieren:
Zuerst benötigen Sie das BitKeeper-Quellarchiv für MySQL 5.1. Siehe Abschnitt 2.8.3, „Installation vom Entwicklungs-Source-Tree“.
              In diesem Quellarchiv suchen Sie im Verzeichnis
              VC++Files/examples/udf_example nach
              den Dateien udf_example.def,
              udf_example.dsp und
              udf_example.dsw.
            
              Außerdem schauen Sie im Quellarchiv in das Verzeichnis
              sql und kopieren daraus die Datei
              udf_example.cc in das
              VC++Files/examples/udf_example-Verzeichnis.
              Dann benennen Sie die Datei in
              udf_example.cpp um.
            
              Öffnen Sie die Datei udf_example.dsw
              mit Visual Studio VC++ und kompilieren Sie damit die UDFs
              als ganz normales Projekt.
            
Sobald die Shared Object-Datei installiert ist, teilen Sie mysqld die neuen Funktionen mit folgenden Anweisungen mit:
mysql>CREATE FUNCTION metaphon RETURNS STRING SONAME 'udf_example.so';mysql>CREATE FUNCTION myfunc_double RETURNS REAL SONAME 'udf_example.so';mysql>CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME 'udf_example.so';mysql>CREATE FUNCTION lookup RETURNS STRING SONAME 'udf_example.so';mysql>CREATE FUNCTION reverse_lookup->RETURNS STRING SONAME 'udf_example.so';mysql>CREATE AGGREGATE FUNCTION avgcost->RETURNS REAL SONAME 'udf_example.so';
          Zum Löschen von Funktionen verwenden Sie DROP
          FUNCTION:
        
mysql>DROP FUNCTION metaphon;mysql>DROP FUNCTION myfunc_double;mysql>DROP FUNCTION myfunc_int;mysql>DROP FUNCTION lookup;mysql>DROP FUNCTION reverse_lookup;mysql>DROP FUNCTION avgcost;
          Die Anweisungen CREATE FUNCTION und
          DROP FUNCTION nehmen Änderungen in der
          Systemtabelle func in der
          mysql-Datenbank vor. Der Name, Typ und
          Shared Library-Name werden in dieser Tabelle gespeichert.
          Daher benötigen Sie INSERT- und
          DELETE-Rechte für die
          mysql-Datenbank, um dort Funktionen
          anzulegen und zu löschen.
        
          Bitte verwenden Sie CREATE FUNCTION nicht,
          um eine Funktion hinzuzufügen, die bereits angelegt ist. Wenn
          Sie eine Funktion neu installieren müssen, entfernen Sie sie
          mit DROP FUNCTION und installieren sie dann
          mit CREATE FUNCTION neu. Das müssen Sie
          beispielsweise tun, wenn Sie eine neue Version Ihrer Funktion
          installieren, damit auch mysqld von der
          neuen Version weiß. Ansonsten würde der Server weiterhin die
          alte Version verwenden.
        
          Eine aktive Funktion ist eine Funktion, die mit
          CREATE FUNCTION geladen, aber nicht mit
          DROP FUNCTION entfernt wurde. Alle aktiven
          Funktionen werden bei jedem Serverstart neu geladen, es sei
          denn, Sie fahren mysqld mit der Option
          --skip-grant-tables hoch. In diesem Fall wird
          die UDF-Initialisierung übersprungen und die UDFs stehen
          nicht zur Verfügung.
        
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.

