Benutzerdefinierte Funktion - UDF (User Defined Function)

<< Exception | IBExpert | Blob-Filter >>

Die deutschsprachige Dokumentation wird seit dem 26. Juli 2016 nicht mehr gepflegt. Aktuelle und vollständige Dokumentation finden Sie auf der englischsprachigen Webseite: IBExpert Documentation


Benutzerdefinierte Funktion - UDF (User-Defined Function)

Eine benutzerdefinierte Funktion (UDF) wird verwendet, um Aufgaben zu bewältigen, die Firebird/InterBase® nicht bewältigen kann. Sie kann als externe Funktion bezeichnet werden, geschrieben in einer komplett anderen Sprache, wie C++ oder Pascal, um Datenmanipulationen durchzuführen, die nicht direkt von Firebird/InterBase® unterstützt werden.

UDFs können von Firebird/InterBase® aufgerufen werden und auf dem Server ausgeführt werden. Diese Funktionen können für sich stehen oder in Bibliotheken gesammelt werden. UDFs bieten die Möglichkeit, Ihre eigenen Funktionen zu erzeugen (wie SUBSTR) und diese in die Datenbank zu integrieren. Jede UDF als Funktion eingerichtet und gehört zu einer DLL (Linux: .SO). Daher besteht eine dynamisch geladene Bibliothek aus mindestens einer Funktion.

UDFs können mit dem IBExpert DB Explorer, IBExpert SQL Editor, oder der IBExpert Skriptausführung (Script Executive) in die Datenbank eingebunden werden.

UDF-Editor

Der IBExpert UDF-Editor zeigt die UDFs an, die per Doppelklick im DB Explorer auf den UDF-Namen oder mit den Navigationssymbolen in der Symbolleiste des Editors einzeln oder gesamt in die Liste eingefügt wurden. Die angezeigte Tabelle kann auch bei Bedarf gefiltert oder gruppiert werden. Die Tabelle zeigt Schlüsselinformationen: Namen, Bibliotheksname, Eingangsadresse, Eingabeparameter, Rückgabe, Rückgabemechanismus (Optionen in Drop-Down-Liste), Checkbox Free it und Beschreibung. Weitere Informationen finden Sie im Tabellenenditor auf den Seiten Beschreibung, Abhängigkeiten, DDL, Vergleich und To-Do pages.

UDF-Definitionen sind datenabnkabhängig und nicht serverabhängig, d.h. sie müssen für jede Datenbank einzeln registriert werden. Seit InterBase® 6/Firebird müssen die Bibliotheken im Firebird/InterBase® UDF-Ordner gespeichert werden. Dies ist nicht bedenklich, wenn Sie mit älteren InterBase® Versionen arbeiten.

Weitere Informationen zur Einbindung der UDFs in Firebird/InterBase® finden Sie in der DECLARE EXTERNAL FUNCTION-Anweisung.

Wichtig zu beachten ist, dass die Mehrheit der UDFs die Verwendung von Indizes während der Ausführung unterdrückt.

Neu seit Firebird 2.0: Im Folgenden werden die Hauptänderungen zusammengefasst, die Details finden Sie in den Firebird 2.0.4 Release Notes im Kapitel External functions (UDFs):

und ALTER EXTERNAL FUNCTION in den Firebird 2.1 Release Notes.

Neu seit Firebird 3.0: Support für Privilegien auf UDFs seit IBExpert Version 2014.06.17.

Ein ideales Beispiel für eine UDF-Bibliothek ist die RFunc (geschrieben in C++), die über 80 UDFs enthält (obwohl einiger dieser UDFs nur in älteren InterBase® Versionen anwendbar sind oder für verscheidene SQL Dialekte). Sie ist verfügbar für Windows- und Linux-Plattformen in englisch oder russisch und kann kostenlos hier heruntergeladen werden: http://www.ibexpert.com/download/udf/. FreeUDFLib ist eine Beispiel für eine in Delphi geschriebene UDF-Bibliothek und kann ebenfalls von diesem Link heruntergeladen werden.

Weitere Informationen finden Sie unter IBEBlock Functions und in der Firebird Dokumentation unter: Firebird built-in functions.

zurück zum Seitenanfang

Lösche externe Funktion/ Lösche UDF

Der DROP EXTERNAL FUNCTION-Befehl entfernt die Deklaration der UDF, die von der Datenbank durch einen zusätzlichen Parameter definiert wurde.

Die gelöschte Funktion kann nicht mehr von der Datenbank erreicht werden, da die entsprechende Referenz zu der UDF-Bibliothek gelöscht wurde. Die UDF ist jedoch noch immer in der UDF-Bibliothek vorhanden, sodass sie weiterhin von anderen Datenbanken verwendet werden kann.

In IBExpert kann eine UDF aus dem DB Explorer durch Auswahl der zu löschenden UDF und Verwendung des Rechtsklickmenüpunktes Lösche UDF oder [Strg + Entf]] gelöscht werden.

IBExpert bittet um Bestätigung

bevor die UDF endgültig gelöscht wird.

Die SQL-Syntax lautet:

 DROP EXTERNAL FUNCTION <external_function_name>

Die Deklaration der UDF kann nur vom Datenbankbesitzer oder vom SYSDBA gelöscht werden. Eine Exception kann von ihrem Erzeuger geändert werden, dem SYSDBA und jedem Benutzer mit Betriebssystem-Grundrechten.

zurück zum Seitenanfang

RFunc

RFunc ist eine UDF-Bibliothek, die über 80 UDFs enthält (obwohl einiger dieser UDFs nur in älteren InterBase® Versionen anwendbar sind oder für verscheidene SQL Dialekte). Sie ist verfügbar für Windows- und Linux-Plattformen in englisch oder russisch und kann kostenlos hier heruntergeladen werden http://www.ibexpert.com/download/udf/. Die aktuellsten Versionen dieser Bibliothek finden Sie unter http://rfunc.sourceforge.net/.

Sie stellt einen Satz Benutzer (UDF) Strings, Bits, numerischen Funktionen dar und kann auch für Operationen mit DATEs und TIME und Blobs verwendet werden. Sie enthält auch PARSER, d.h. Expressions-Berechner.

InterBase® 4.2, 5.x, 6.x, 7.0 (Windows 9x, NT, 2000) und InterBase® 5.x, 6.x, 7.0 (Linux) oder Firebird werden unterstützt. Die Bibliothek ist in C++ und wird mit Quellcode geliefert.

RFunc Installation

Wählen Sie die ZIP-Datei aus (Windows oder Linux; englisch oder russisch) und laden Sie diese herunter.

Windows Installation

  1. Die RFUNC.DLL-Datei muss in einen Ordner kopiert werden:
  • Variante 1: <IB path>IB_path\bin (für IB6: IB_path\UDF), wobei IB_path der Pfad zu dem Ordner ist, in dem Firebird/InterBase® installiert ist (empfohlen).
  • Variante 2: Windows\System (für Windows 9x) oder WinNT\System32 (Windows NT, 2k).
  1. nur für IB 5.x: kopieren Sie die ib_util.dll-Datei von <IB path>\Lib nach \Bin.

Wenn mehrere Versionen von InterBase® Servern auf einem Computer installiert sind, ist es notwendig, die zu der installierten Client IB (GDS32.DLL) passenden RFunc Bibliothek zu verwenden.

Es wird empfohlen, bevor der Firebird/InterBase® Server gestartet wird, GDS32.DLL entsprechend der Version des Servers zu ersetzen.

Linux Installation

IB 5.x:

  • Variante 1: Kopieren Sie die RFunc-Datei in das Verzeichnis /usr/lib.
  • Variante 2: Kopieren Sie die RFunc-Datei in ein Verzeichnis, zum Beispiel /home/rFunc. Erzeugen Sie die Referenz zur Bibliothek durch die Verwendung des Befehls \ln -s /home/rFunc/rfunc /usr/lib/rfunc\ . Der Benutzer muss die Rechte zur Erzeugung von Referenzen im Verzeichnis /usr/lib besitzen.

InterBase® 6-7 und Firebird (Windows und Linux):

Kopieren Sie die RFunc-Datei ind das Verzeichnis \UDF.

Das rfuncx.sql-Skript (x = InterBase® Version; verwenden Sie rfunc6.sql für alle Firebird Versionen), zu finden in dem UDF\sql-Verzeichnis, diese sollte dann in die IBExpert Skriptausführung (Script Executive) geladen werden (zu finden im Menü Nützliches) und ausgeführt werden [F9]. Die Datenbankverbindung muss hergestellt sein, da die UDF-Bibliothek für jede Datenbank registriert werden muss (d.h. sie sind datenbankabhägig, nicht serverabhängig).

Anschließend muss die Datenbankverbindung gelöst und wieder hergestellt werden, damit die vollständige Liste der RFunc UDFs im DB Explorercan unter dem DB Objketzweig UDF angezeigt wird.

zurück zum Seitenanfang

FreeUDFLib

FreeUDFLib ist eine kostenlose UDF Bibliothek (Oktober 1998), die viele nützliche UDFs zur Verwendung in InterBase® 4.2 und 5.0 auf der Win32 Plattform enthält (leider kein UNIX Support). Sie ist komplett in Delphi geschrieben und der Quellcode wird mitgeliefert.

Sie kann kostenlos hier geruntergeladen werden: http://www.ibexpert.com/download/udf/.

Diese Ausgabe ist kostenlos, aber dennoch keine PUBLIC DOMAIN. Weitere Infos zur Lizenzierung finden Sie in der Datei license.txt, die in der ZIP-Datei.

FreeUDFLib Installation

Nach dem Entpacken der FreeUDFLib.zip, kopieren Sie die FreeUDFLib.dll in das bin- oder udf-Verzeichnis von Firebird/InterBase®, beispielsweise: C:\Program Files\InterBase Corp\InterBase\bin, C:\Program Files\Borland\InterBase\udf\bin or C:\Program Files\Firebird\udf\bin.

Das Skript ext_funcs.sql muss dann in die IBExpert Skriptausführung (Script Executive) kopiert (zu finden im IBExpert Menü Nützliches) und mit [F9] ausgeführt werden. Eine Datenbankverbindung muss hergestellt sein, da UDF-Bibliotheken für jede Datenbank registriert werden müssen (d.h. sie sind datenbankabhängig und nicht serverabhängig). Falls notwendig, verwenden Sie den Menüpunkt CONNECT Anweisung hinzufügen in der Skriptausführung, um mit der gewünschten Datenbank zu verbinden, bevor ausgeführt wird.

Anschließend muss die Datenbankverbindung gelöst und wieder hergestellt werden, damit die vollständige Liste der FreeUDF externen Funktionen im DB Explorer unter dem DB Objektzweig UDF angezeigt wird.

Siehe auch:
englischsprachig:
Aggregate Functions
Conversion Functions
DECLARE EXTERNAL FUNCTION (incorporating a new UDF library)
Using descriptors with UDFs
Threaded Server and UDFs
External functions
External functions (UDFs)
ALTER EXTERNAL FUNCTION
DECLARE EXTERNAL FUNCTION
Passing NULL to UDFs in Firebird 2
How to write an internal UDF function
Java UDF functional specification
Creating UDFs in Delphi
Firebird Null Guide: NULL <–> non-NULL conversions you didn't ask for

zurück zum Seitenanfang
<< Exception | IBExpert | Blob-Filter >>