Una possibile soluzione (che potrebbe eventualmente essere semplificata) è utilizzare una funzione tabella per elaborare il cursore e aggiungere il valore della funzione.
Supponiamo che la funzione che restituisce sys_refcursor sia chiamata get_cur
e che il cursore sia costituito dalla colonna ID, NAME
(questo è importante, poiché la funzione tabella richiede la definizione del tipo).
Dichiari il TIPO per la riga (inclusa la colonna del percorso aggiuntivo) e per la tabella risultante.
create type t_row is object
( id number(10),
name varchar2(10),
path varchar2(10)
);
/
create type t_rows is table of t_row;
/
e definire la funzione tabella prelevando il cursore e aggiungendo la chiamata di funzione.
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;
/
Ora puoi selezionare i dati dalla funzione tabella
select * from table(get_cur2);
ID NAME PATH
---------- ---------- ----------
1 one path 1
2 two path 2
e ovviamente puoi usare questa query per aprire un cursore in una terza funzione che restituirà SYS_REFCURSOR con la colonna del percorso aggiuntiva.