Oracle parallel pipelined function (example)


CREATE OR REPLACE FUNCTION parallel_pipelined_function(cursor_in IN pkg_show.agrd_ref_cursor)
RETURN PKG_SHOW.TYPE_AGRD_TBL PIPELINED
PARALLEL_ENABLE
(PARTITION cursor_in BY RANGE (TERR_ID, N_ID_OWNER, N_ID, N_ID_PNP, VYEAR)) IS

      v_incoming PKG_SHOW.TYPE_AGRD_TBL
;
      v_outgoing PKG_SHOW.TYPE_AGRD_REC
;

 BEGIN

      LOOP
         FETCH cursor_in BULK COLLECT INTO v_incoming LIMIT
100;
         FOR i IN
1 .. v_incoming.COUNT LOOP
            v_outgoing
:= v_incoming(i);
            PIPE ROW
(v_outgoing);
         END LOOP
;
         EXIT WHEN cursor_in
%NOTFOUND;
      END LOOP
;
      CLOSE cursor_in
;

      RETURN
;

END parallel_pipelined_function
;