Как можно вывести таблицу из функции и в дальнейшем работать с ней?
Есть 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**