@iskateli

Как вернуть результаты запроса из функции если SQL формируется динамически?

В функции динамически формируется запрос, как можно вернуть его результаты из функции? Проблема в том, что кол-во столбцов в запросе каждый раз может быть разным и поэтому нельзя объявить тип-структуру чтобы возвратить результаты. Вот связанный вопрос, но там заранее определена структура.
В интенете нашёл решение, но оно только для заранее определённой типа-структуры
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
  • Вопрос задан
  • 121 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы