pipelined functions in oracle
Eine sehr gute Erklärung zu piplined functions findet sich bei oracle-developer.net. Es werden verschiedene Möglichkeiten beschrieben und auf die Unterschiede zwischen materialisierten und pipelined Funktionen hinsichtlich Antwortverhalten und Speicherbedarf eingegangen.
Der für mich wichtigste Punkt:
Es gibt die Möglichkeit, ohne (PL-Paket-)externe Datentypen auszukommen. D.h. alle benötigten Struktuen können innerhalb eines PL-Paketes deklariert werden. Dies sollte die Wartung deutlich vereinfachen.
Mit folgenden Zeilen werden alle benötigten Objekte in der Paket-Spezifikation angelegt:
Im Paket-Body wird die eigentliche Logik hinterlegt:
Aufgerufen wird das ganze am Ender per
Der komplette Artikel findet sich unter http://www.oracle-developer.net/display.php?id=207.
Der für mich wichtigste Punkt:
Es gibt die Möglichkeit, ohne (PL-Paket-)externe Datentypen auszukommen. D.h. alle benötigten Struktuen können innerhalb eines PL-Paketes deklariert werden. Dies sollte die Wartung deutlich vereinfachen.
Mit folgenden Zeilen werden alle benötigten Objekte in der Paket-Spezifikation angelegt:
- TYPE foo_rt IS RECORD (); --Record-Typ anlegen
- TYPE foo_ntt IS TABLE OF foo_rt; --Collection definieren
- FUNCTION my_pipeline ( -- pipelined function definieren
- p1 in varchar2, -- Parameter 1
- p2 in number) -- Parameter 2
- RETURN foo_ntt PIPELINED;
Im Paket-Body wird die eigentliche Logik hinterlegt:
- FOR r_tmp IN c_sql LOOP
- PIPE ROW (r_tmp);
- END LOOP;
- RETURN;
Aufgerufen wird das ganze am Ender per
- select * from table(my_pipeline(p1,p2));
Der komplette Artikel findet sich unter http://www.oracle-developer.net/display.php?id=207.
Kommentare
Kommentar veröffentlichen