Een mogelijke oplossing (die uiteindelijk zou kunnen worden vereenvoudigd) is om een tabelfunctie te gebruiken om de cursor te verwerken en de functiewaarde toe te voegen.
Neem aan dat de functie die de sys_refcursor retourneert, get_cur
wordt genoemd en dat de cursor bestaat uit kolom ID, NAME
(dit is belangrijk, omdat de tabelfunctie typedefinitie vereist).
U declareert het TYPE voor de rij (inclusief de extra padkolom) en voor de resulterende tabel.
create type t_row is object
( id number(10),
name varchar2(10),
path varchar2(10)
);
/
create type t_rows is table of t_row;
/
en definieer de tabelfunctie door de cursor op te halen en de functieaanroep toe te voegen.
create or replace function get_cur2 return
t_rows
PIPELINED
as
cv_out sys_refcursor;
id number;
name varchar2(100);
begin
cv_out := get_cur;
loop
FETCH cv_out INTO id, name;
exit when cv_out%NOTFOUND;
pipe row(t_row(id,name, GetRegionPath(id)));
end loop;
close cv_out;
return;
end;
/
Nu kunt u de gegevens uit de tabelfunctie selecteren
select * from table(get_cur2);
ID NAME PATH
---------- ---------- ----------
1 one path 1
2 two path 2
en natuurlijk kunt u deze query gebruiken om een cursor te openen in een derde functie die de SYS_REFCURSOR met de extra padkolom teruggeeft.