Dieser Abschnitt enthält eine kurze Einführung in die Funktionen, die in den Beispielen in diesem Handbuch verwendet werden. Eine Datenbankfunktion ist die Beziehung zwischen einer Gruppe von Eingabedatenwerten und einem Ergebniswert.
Funktionen können integriert oder benutzerdefiniert sein. DB2 Universal Database bietet viele integrierte und vorinstallierte benutzerdefinierte Funktionen.
Die integrierten Funktionen finden Sie im Schema SYSIBM. Die vorinstallierten benutzerdefinierten Funktionen befinden sich im Schema SYSFUN. SYSIBM und SYSFUN sind reservierte Schemata.
Nicht alle Benutzeranforderungen können mit Hilfe der integrierten und vorinstallierten benutzerdefinierten Funktionen erfüllt werden. Daher müssen Anwendungsentwickler unter Umständen eine eigene Funktionsgruppe erstellen, die speziell auf deren Anwendungen abgestimmt ist. Ermöglicht wird dies durch benutzerdefinierte Funktionen, die den Bereich von DB2 Universal Database so erweitern, daß beispielsweise angepaßte Geschäfts- oder wissenschaftliche Funktionen integriert werden. Dieser Aspekt wird unter Benutzerdefinierte Funktionen näher erläutert.
Spaltenfunktionen werden auf eine Gruppe von Werten in einer Spalte angewendet, um einen einzelnen Ergebniswert abzuleiten. Im folgenden werden nur einige Beispiele von Spaltenfunktionen dargestellt. Eine vollständige Liste finden Sie im Handbuch SQL Reference.
Die folgende Anweisung wählt das höchste Gehalt (Spalte SALARY) aus der Tabelle STAFF aus:
SELECT MAX(SALARY) FROM STAFF
Diese Anweisung gibt den Wert 22959.20 aus der Beispieltabelle STAFF zurück.
Das nächste Beispiel wählt die Namen und Gehälter der Mitarbeiter aus, deren Einkommen über dem Durchschnittseinkommen liegt, die jedoch eine geringere als die durchschnittliche Betriebszugehörigkeitsdauer aufweisen.
SELECT NAME, SALARY FROM STAFF WHERE SALARY > (SELECT AVG(SALARY) FROM STAFF) AND YEARS < (SELECT AVG(YEARS) FROM STAFF)
Diese Anweisung erzeugt das folgende Ergebnis:
NAME SALARY --------- --------- Marenghi 17506.75 Daniels 19260.25 Gonzales 16858.20
Im vorstehenden Beispiel ist die Spaltenfunktion in die Klausel WHERE in Form einer Unterabfrage integriert, statt direkt implementiert zu sein (z. B. WHERE SALARY > AVG(SALARY)). In der Klausel WHERE können keine Spaltenfunktionen angegeben werden. Dies ergibt sich aus der Reihenfolge der Operationen. Die Klausel WHERE wird vor der Klausel SELECT ausgewertet. Infolgedessen kann bei Auswertung der Klausel WHERE die Spaltenfunktion nicht auf die Gruppe von Werten zugreifen. Diese Gruppe von Werten wird zu einem späteren Zeitpunkt durch die Klausel SELECT ausgewählt.
Das Element DISTINCT kann als Bestandteil des Arguments einer Spaltenfunktion verwendet werden, um gleiche Werte zu eliminieren, bevor eine Funktion angewendet wird. Durch die Angabe COUNT(DISTINCT WORKDEPT) wird somit die Anzahl der unterschiedlichen Abteilungen berechnet.
Eine Skalarfunktion führt eine Operation für einen Einzelwert aus und gibt einen anderen Einzelwert zurück. Im folgenden werden nur einige Beispiele für die Skalarfunktionen von DB2 Universal Database dargestellt.
Eine ausführliche Liste und Beschreibung der Skalarfunktionen finden Sie im Handbuch SQL Reference.
Die folgende Anweisung gibt die Abteilungsnamen aus der Tabelle ORG zusammen mit der Länge dieser Namen zurück:
SELECT DEPTNAME, LENGTH(DEPTNAME) FROM ORG
Diese Anweisung erzeugt das folgende Ergebnis:
DEPTNAME 2 -------------- ----------- Head Office 11 New England 11 Mid Atlantic 12 South Atlantic 14 Great Lakes 11 Plains 6 Pacific 7 Mountain 8
Anmerkung: Da der Angabe LENGTH(DEPTNAME) nicht mit Hilfe der Klausel AS ein aussagekräftiger Name zugeordnet wurde, wird in der zweiten Spalte eine durch das System generierte Nummer angezeigt.
Tabellenfunktionen geben Spalten einer Tabelle zurück. Das Ergebnis gleicht der Tabelle, die durch eine einfache Anweisung CREATE TABLE erstellt wird.
Eine Tabellenfunktion kann nur in der Klausel FROM einer SQL-Anweisung verwendet werden.
Die einzige in DB2 Universal Database gegenwärtig unterstützte Tabellenfunktion ist die Funktion SQLCACHE_SNAPSHOT.