DB2 Universal Database - Systemverwaltung


Erstellen einer benutzerdefinierten Funktion (UDF) oder Methode

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:

Skalar
Liefert einen einzelnen Wert zurück, wenn sie aufgerufen wird. Zum Beispiel ist die integrierte Funktion SUBSTR() eine Skalarfunktion. Benutzerdefinierte Skalarfunktionen können als externe Funktion oder Quellenfunktion erstellt werden.

Spalte
Liefert einen einzelnen Wert aus einer Menge von typgleichen Werten (einer Spalte). Diese Art der Funktion wird in DB2 manchmal auch als Aggregatfunktion (Aggregation) bezeichnet. Ein Beispiel für eine Spaltenfunktion ist die integrierte Funktion AVG(). Eine externe benutzerdefinierte Spaltenfunktion kann für DB2 nicht definiert werden, aber eine benutzerdefinierte Spaltenfunktion, die aus einer integrierten Spaltenfunktion abgeleitet wird, kann definiert werden. Dies bietet Vorteile bei der Verarbeitung benutzerdefinierter Datentypen.

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.

Tabelle
Liefert eine Tabelle an die SQL-Anweisung zurück, von der sie aufgerufen wird. Tabellenfunktionen können nur in der Klausel FROM einer Anweisung SELECT aufgerufen werden. Eine solche Funktion kann dazu dienen, das SQL-Verarbeitungspotential auf Daten anzuwenden, die keine DB2-Daten sind, oder solche Daten in eine DB2-Tabelle umzuwandeln.

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 einer Funktionszuordnung

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.

Erstellen einer Funktionsschablone

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.


[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]