Uma solução possível (que poderia eventualmente ser simplificada) é usar uma função de tabela para processar o cursor e adicionar o valor da função.
Suponha que a função que retorna o sys_refcursor seja chamada
get_cur
e que o cursor consiste na coluna ID, NAME
(isso é importante, pois a função de tabela requer definição de tipo). Você declara o TYPE para a linha (incluindo a coluna de caminho adicional) e para a tabela resultante.
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 defina a função de tabela buscando o cursor e adicionando a chamada de função.
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;
/
Agora você pode selecionar os dados da função de tabela
select * from table(get_cur2);
ID NAME PATH
---------- ---------- ----------
1 one path 1
2 two path 2
e é claro que você pode usar esta consulta para abrir um cursor em uma terceira função que retornará o SYS_REFCURSOR com a coluna de caminho adicional.