В функции динамически формируется запрос, как можно вернуть его результаты из функции? Проблема в том, что кол-во столбцов в запросе каждый раз может быть разным и поэтому нельзя объявить тип-структуру чтобы возвратить результаты. Вот связанный вопрос, но там заранее определена структура.
В интенете нашёл решение, но оно только для заранее определённой типа-структуры
create or replace package pack as
cursor cur (id int) is
select *
from tab where id=cur.id;
type resty is table of tab%rowtype;
function TabById (id int) return resty pipelined;
end;
/
create or replace package body pack as
function TabById (id int) return resty pipelined is
r tab%rowtype;
begin
open cur (id);
loop fetch cur into r;
exit when cur%notfound;
r.name := '*'||r.name;
pipe row (r);
end loop;
return;
end;
end;
/
select * from pack.TabById (1);
ID NAME
---------- ---------------------------------------------
1 *name 1