Anfang des Inhaltsbereichs

Diese Grafik wird im zugehörigen Text erklärt Datenbankfunktionen Dokument im Navigationsbaum lokalisieren

Sie können benutzerspezifische Datenbankfunktionen definieren. In einer SQL-Anweisung kann diese benutzerdefinierte Datenbankfunktion dann wie jede andere festdefinierte Funktion verwendet werden.

Eine Datenbankfunktion kann mehrere SQL-Anweisungen enthalten und dem Anwendungsentwickler stehen eine Reihe von Kontrollstrukturen zur Verfügung. Sie können z.B. Schleifen oder Verzweigungen innerhalb einer Datenbankfunktion programmieren.

Datenbankfunktionen sind spezialisierte Datenbankprozeduren, die beliebig viele Eingabe-, aber nur genau einen Ausgabeparameter besitzen. Der Ausgabeparameter stellt das Ergebnis der Datenbankfunktion dar.

Voraussetzungen

Sie benötigen die Demo-Daten für das SQL-Tutorial.

Starten Sie das Query Tool SQL Studio als Datenbankadministrator MONA mit dem Kennwort RED und melden Sie sich an die Demo-Datenbankinstanz DEMODB an.

Anlegen einer Datenbankfunktion

Zum Anlegen einer Datenbankfunktion verwenden Sie die CREATE FUNCTION-Anweisung.

 

CREATE FUNCTION hotel.avgprice (zip CHAR(5)) RETURNS FIXED(6,2) AS
    VAR sum FIXED(10,2); price FIXED(6,2);
    hotels INTEGER; avg_price FIXED(6,2);
TRY
  SET sum = 0; SET hotels = 0;
  DECLARE functionresult CURSOR FOR
  SELECT price FROM hotel.room,hotel.hotel WHERE zip = :zip AND
  room.hno = hotel.hno AND type = 'single';
    WHILE $rc = 0 DO BEGIN
      FETCH functionresult INTO :price;
      SET sum = sum + price;
      SET hotels = hotels + 1;
    END;
CATCH
  IF $rc <> 100 THEN STOP ($rc, 'unexpected error');
CLOSE functionresult;
IF hotels > 0 THEN RETURN sum/hotels
  ELSE RETURN NULL;

Die Datenbankfunktion avgprice bestimmt den durchschnittlichen Preis für Einzelzimmer in Hotels, die im angegebenen Postleitzahlenbereich liegen.

Erläuterung

     Eingabeparameter ist die Postleitzahl zip, Nach dem Schlüsselwort RETURNS wird der Datentyp des Ausgabewerts festgelegt.

     Nach dem Schlüsselwort AS werden die SQL-Anweisungen (z.B. SELECT-Anweisung) und Kontrollstrukturen (z.B. WHILE- und eine IF-Anweisung) definiert, die zum Ausführen der gewünschten Funktion erforderlich sind.

     Nach dem Schlüsselwort VAR werden die innerhalb der Datenbankfunktion erforderlichen Variablen definiert.

     Fehlerbehandlung: Wenn in der Anweisungsfolge zwischen TRY und CATCH ein SQL-Fehler auftritt, wird unverzüglich in die auf das CATCH folgende Anweisung verzweigt. In dieser Anweisung kann die eigentliche Fehlerbehandlung programmiert werden.

     Mittels SET werden den Variablen sum und hotels Werte zugewiesen.

     Durch die DECLARE CURSOR-Anweisung wird die benannte Ergebnistabelle functionresult definiert.

     In der SELECT-Anweisung müssen die Tabellen vollständig, d.h. unter Angabe des Eigentümers angegeben werden. Beachten Sie, dass die Übergabe der Postleitzahl als Parameter erfolgt: :zip.

     Die WHILE-Anweisung ermöglicht die bedingte Wiederholung von Anweisungen. Solange die angegebene Suchbedingung zutrifft, wird die Anweisung ausgeführt.

     Die FETCH-Anweisung weist Parametern die Werte der aktuellen Zeile der Ergebnistabelle functionresult zu.

     Die $rc-Variable liefert nach der Ausführung der SELECT-Anweisung einen numerischen Fehlercode zurück. Der Wert 0 bedeutet, dass die SELECT-Anweisung erfolgreich ausgeführt wurde.

     Eine IF-Anweisung wertet zunächst die Suchbedingung aus. Ist diese erfüllt, so wird die im THEN-Zweig definierte Anweisung ausgeführt, andernfalls wird - wenn vorhanden - die Anweisung im ELSE-Zweig ausgeführt.

     Die CLOSE-Anweisung löscht die Ergebnistabelle functionresult.

     Nach dem Schlüsselwort RETURN wird der Ausgabeparameter definiert.

 

Siehe auch:

SQL-Referenzhandbuch, StrukturlinkCREATE FUNCTION-Anweisung (create_function_statement)

SQL-Referenzhandbuch, StrukturlinkRoutine (routine)

Systemtabellen auswerten, StrukturlinkFUNCTIONS

 

Aufrufen einer Datenbankfunktion

Zum Aufrufen einer Datenbankfunktion verfahren Sie wie beim Aufruf einer fest definierten Funktion.

Wenn die Tabelle hotel mit den SQL-Anweisungen für das Schema HOTEL erzeugt und mit Daten gefüllt wurde, können Sie folgende SELECT-Anweisung ausprobieren:

 

SELECT hno, hotel.avgprice(zip) avgprice FROM hotel.hotel WHERE hno < 100

Ergebnis

HNO

AVGPRICE

10

135

20

70

30

45

40

87.5

50

105

60

120

70

115

80

87.5

90

90

 

Siehe auch:

SQL-Referenzhandbuch, StrukturlinkDatenbankfunktionsaufruf (dbfunction_call)

 

Löschen einer Datenbankfunktion

Zum Löschen einer Datenbankfunktion verwenden Sie DROP FUNCTION-Anweisung.

 

DROP FUNCTION hotel.avgprice

Mit Hilfe dieser SQL-Anweisung löschen Sie die Definition der Datenbankfunktion.

Siehe auch:

SQL-Referenzhandbuch, StrukturlinkDROP FUNCTION-Anweisung (drop_function_statement)

Weitere Beispiele zur Datendefinition

Ende des Inhaltsbereichs