Benutzerdefinierte Funktionen (UDF - User-defined Functions) erweitern und ergänzen die Unterstützung, die von integrierten SQL-Funktionen zur Verfügung gestellt wird, und können an allen Stellen verwendet werden, an denen integrierte Funktionen verwendet werden können. Benutzerdefinierte Funktionen können in folgenden zwei Formen erstellt werden:
Es gibt drei Arten von UDFs:
Wenn es zum Beispiel einen benutzerdefinierten Datentyp SHOESIZE gibt, der mit dem Basistyp INTEGER definiert wurde, kann eine benutzerdefinierte Funktion AVG(SHOESIZE) erstellt werden, die aus der integrierten Funktion AVG(INTEGER) abgeleitet wird und daher eine Spaltenfunktion ist.
Eine Tabellenfunktion kann beispielsweise eine Datei in eine Tabelle umwandeln, Musterdaten aus dem World-Wide Web tabellarisieren oder auf eine Datenbank von Lotus Notes zugreifen und Informationen zurückliefern wie z. B. Datum, Absender und Text von Nachrichten der elektronischen Post. Diese Informationen können mit anderen Tabellen in der Datenbank verknüpft werden.
Eine Tabellenfunktion kann nur eine externe Funktion sein. Sie kann keine Quellenfunktion sein.
Informationen über vorhandene benutzerdefinierte Funktionen werden in den Katalogsichten SYSCAT.FUNCTIONS und SYSCAT.FUNCPARMS gespeichert. Der Systemkatalog enthält nicht den ausführbaren Code der UDF. (Berücksichtigen Sie daher bei der Erstellung der Sicherungs- und Wiederherstellungspläne auch die Verwaltung der ausführbaren Dateien Ihrer benutzerdefinierten Funktionen.)
Statistische Daten über die Leistung der UDFs spielen bei der Kompilierung der SQL-Anweisungen eine wichtige Rolle. Informationen zum Aktualisieren von UDF-Statistiken im Systemkatalog finden Sie in Aktualisieren der Statistiken für benutzerdefinierte Funktionen.
Einzelheiten zur Verwendung der Anweisung CREATE FUNCTION, um eine geeignete UDF für Ihre spezielle Anwendung zu schreiben, finden Sie im Handbuch Application Development Guide. Einzelheiten zur UDF-Syntax finden Sie im Handbuch SQL Reference.
Erstellen Sie in einer zusammengeschlossenen Datenbank eine Funktionszuordnung, wenn Sie eine lokale Funktion oder Funktionsschablone (beschrieben in Erstellen einer Funktionsschablone) in einer oder mehreren Datenquellen einer Funktion zuordnen wollen. Standard-Funktionszuordnungen für viele Datenquellenfunktionen werden zur Verfügung gestellt.
Funktionszuordnungen sind in folgenden Situationen nützlich:
Funktionszuordnungen, die mit Anweisungen CREATE FUNCTION MAPPING definiert wurden, werden in der zusammengeschlossenen Datenbank gespeichert.
Funktionen (oder Funktionsschablonen) müssen über die gleiche Anzahl von Eingabeparametern verfügen wie die Datenquellenfunktion. Außerdem sollten die Datentypen der Eingabeparameter auf der zusammengeschlossenen Seite mit den Datentypen der Eingabeparameter auf der Datenquellenseite kompatibel sein.
Verwenden Sie die Anweisung CREATE FUNCTION MAPPING, um eine Funktionszuordnung zu erstellen. Geben Sie beispielsweise folgendes ein, um eine Funktionszuordnung zwischen einer Oracle-Funktion AVGNEW und einem DB2-Äquivalent auf dem Server ORACLE1 zu erstellen:
CREATE FUNCTION MAPPING ORAVGNEW FOR SYSIBM.AVG(INT) SERVER ORACLE1 OPTIONS (REMOTE_NAME 'AVGNEW')
Sie müssen über die Berechtigung SYSADM oder DBADM für die zusammengeschlossene Datenbank verfügen, um diese Anweisung verwenden zu können. Attribute von Funktionszuordnungen werden in SYSCAT.FUNCMAPPINGS gespeichert.
Der Server einer zusammengeschlossenen Datenbank bindet keine Eingabe-Host-Variablen und ruft keine Ergebnisse von LOB, LONG VARCHAR/VARGRAPHIC, DATALINK sowie von einzigartigen und strukturierten Datentypen ab. Es kann keine Funktionszuordnung erstellt werden, wenn ein Eingabeparameter oder der Rückgabewert einen dieser Typen enthält.
Weitere Einzelheiten zum Verwenden und Erstellen von Funktionszuordnungen finden Sie im Handbuch Application Development Guide. Einzelheiten zur Syntax von CREATE FUNCTION MAPPING finden Sie im Handbuch SQL Reference.
In Systemen zusammengeschlossener Datenbanken dienen Funktionsschablonen als "Anker" für Funktionszuordnungen. Sie ermöglichen das Zuordnen einer Datenquellenfunktion, wenn auf dem Server einer zusammengeschlossenen Datenbank keine entsprechende DB2-Funktion vorhanden ist. Für eine Funktionszuordnung muß eine Funktionsschablone oder eine ähnliche Funktion unter DB2 vorhanden sein.
Die Schablone ist nur eine Funktionshülle für Name, Eingabeparameter und Rückgabewert der Funktion. Es gibt keine lokale ausführbare Datei für die Funktion.
Daher kann es vorkommen, daß ein Aufruf der Funktionsschablone fehlschlägt, obwohl die Funktion in der Datenquelle verfügbar ist. Betrachten Sie zum Beispiel die folgende Abfrage:
SELECT myfunc(C1) FROM nick1 WHERE C2 < 'A'
Wenn DB2 und die Datenquelle mit dem Objekt, auf das nick1 verweist, nicht die gleiche Sortierfolge aufweisen, schlägt die Abfrage fehl, weil der Vergleich in DB2 vorgenommen werden muß, die Funktion sich jedoch in der Datenquelle befindet. Wenn die Sortierfolgen gleich wären, könnte die Vergleichsoperation an der Datenquelle stattfinden, die die zugrundeliegende Funktion enthält, auf die myfunc verweist.
Funktionen (oder Funktionsschablonen) müssen über die gleiche Anzahl von Eingabeparametern verfügen wie die Datenquellenfunktion. Die Datentypen der Eingabeparameter auf der Seite der zusammengeschlossenen Datenbank sollten mit den Datentypen der Eingabeparameter auf der Datenquellenseite kompatibel sein. Diese Voraussetzungen gelten auch für die Rückgabewerte.
Zum Erstellen von Funktionsschablonen können Sie die Anweisung CREATE FUNCTION mit dem Schlüsselwort AS TEMPLATE verwenden. Nach dem Erstellen der Schablone ordnen Sie die Schablone mit Hilfe der Anweisung CREATE FUNCTION MAPPING der Datenquelle zu.
Geben Sie beispielsweise folgendes ein, um eine Funktionsschablone und eine Funktionszuordnung für die Funktion MYS1FUNC auf dem Server S1 zu erstellen:
CREATE FUNCTION MYFUNC(INT) RETURNS INT AS TEMPLATE CREATE FUNCTION MAPPING S1_MYFUNC FOR MYFUNC(INT) SERVER S1 OPTIONS (REMOTE_NAME 'MYS1FUNC')
Einzelheiten zum Verwenden und Erstellen von Funktionsschablonen finden Sie im Handbuch Application Development Guide. Einzelheiten zur Syntax von CREATE FUNCTION finden Sie im Handbuch SQL Reference.