| Wie funktioniert eine pipelined function |
|
|
| Donnerstag, 13. November 2008 um 15:52 | ||||
|
Nicht immer müssen Tabellenzeilen aus einer Datenbanktabelle stammen. Es gibt Situationen, in denen Tabellendaten dynamisch ermittelt werden sollen. Bspw. bittet mich ein PHP-Entwickler, ihm eine Tabelle mit Wochentagen bereitzustellen, damit er einen Terminkalender erzeugen kann. Wer deswegen eine Tabelle Kalendertag erzeugt und darin alle Wochentage des laufenden und womöglich der folgenden Jahre speichert, macht sich unnötig Arbeit. Pipelined functions sind Deine Freunde!
Pipelined Functions sind PL/SQL-Objekte, die nicht skalare Werte liefern, sondern mehrere Werte in Tabellenform liefern. Diese Tabellenform ist Voraussetzung, damit eine Nutzung mit SQL-Mitteln überhaupt möglich ist. Beim Anlegen der Funktion muss der Rückgabetyp der Funktion auf Datenbankseite bereits angelegt sein. Das könnte zum Beispiel so aussehen:
Dieser Datentyp kann jetzt von Funktionen genutzt werden. Beim Anlegen der Funktion richten wir uns nach der Syntax, die auch für normale Funktionen gilt. Der einzige Unterschied ist das Schlüsselwort PIPELINED, das hinter dem Rückgabetyp der Funktion steht. Im ausführbaren Teil der Funktion können wir nun Zeile für Zeile liefern mit der Anweisung PIPE ROW, gefolgt vom Datenwert. Dieser muß natürlich typkompatibel zum Typ sein, den wir beim Erzeugen des Tabellentypen genutzt haben. Meine Funktion liefert alle Tage des Monats des Datums, das beim Aufruf übergeben wurde.
Die Variable erster_tag enthält den ersten Tag des Monats des übergebenen Datums, in der Schleife mache ich 31 Durchläufe, wobei ich die Schleife bereits vorher verlasse, wenn der Monat weniger Tage hat. Ein Aufruf dieser Funktion in SQL kann dann erfolgen mit
um alle Tage des laufenden Monats zu erhalten. Nun wäre noch zu prüfen, ob die pipelined function performanter ist als ein entsprechendes SQL-Statement. Das SQL-Pendant finden Sie unter: alle Tage des laufenden Monats ermitteln
|
||||

