Как можно вывести таблицу из функции и в дальнейшем работать с ней?

Есть SQL команда:

SELECT id, parameter, value -- id и parameter -> INTEGER, value -> VARCHAR2
FROM t_table
WHERE 1=1;

Которая выдает много (~15) строк, которые должна возврашать функция.

После, я хотел бы обрабатывать результат в цикле. Мне надо, эти строки постепенно "скармливать" процедуре в цикле, которая отредактирует значения, исправит параметр, и скопирует в другую таблицу.

Как я могу так сделать?

PS Для среды используется DataGrip


Ответы (1 шт):

Автор решения: 0xdb

Мне надо эти строки постепенно скармливать процедуре в цикле

Не надо постепенно скармливать, никогда не вызывайте SQL запросы в цикле.

Сразу "скормите" всё что есть, как в этом воспроизводимом примере:

create table p1 as
    select rownum id, 'param '||rownum val
    from dual connect by level<=3
/
create table p2 as select * from p1 where 1=0
/
declare 
    type paramtab is table of p2%rowtype;
    params paramtab;

    function getParams return paramtab is
        ret paramtab;
    begin
        select rownum id, 'param '||rownum val bulk collect into ret 
        from p1;
        return ret;
    end;
    procedure procParams (params paramtab) is
        newparams paramtab := params;
    begin
        for i in 1..newparams.count loop 
            --## здесь обработка параметров
            newparams(i).val := newparams(i).val||'**'; 
        end loop;
        
        forall i in indices of newparams
            insert into p2 values (newparams(i).id, newparams(i).val);
    end;
begin
    procParams (getParams);
end; 
/

Который даст ожидаемый результат:

select * from p2
/ 
        ID VAL                                           
---------- ----------------------------------------------
         1 param 1**                                     
         2 param 2**                                     
         3 param 3**                                     
→ Ссылка