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:

  • 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

Beliebte Posts aus diesem Blog

PGA unter Oracle 11g

trunc(sysdate) - nette Spiele mit dem Datum

Datapump - Verzeichnis erstellen