Эта ошибка говорит о том, что вы не можете вызывать конвейерные функции с использованием PL SQL, поэтому вы не можете напрямую писать v:=a()
. Но вы можете использовать SQL. Ниже приведен пример, когда конвейеризованный b
получает входные данные из конвейерного a
и умножает зарплаты.
Пакет:
create or replace package pkg is
type tr is record (id int, name varchar2(10), sal int);
type tt is table of tr;
function a return tt pipelined;
function b(par in tt) return tt pipelined;
end pkg;
Тело:
create or replace package body pkg is
function a return tt pipelined is
v_tr tr;
begin
v_tr.id := 1; v_tr.name := 'Mark'; v_tr.sal := 100;
pipe row (v_tr);
v_tr.id := 2; v_tr.name := 'Pete'; v_tr.sal := 120;
pipe row (v_tr);
return;
end;
function b(par in tt) return tt pipelined is
v_tr tr;
begin
for i in 1..par.last loop
v_tr := par(i);
v_tr.sal := v_tr.sal * 10;
pipe row (v_tr);
end loop;
return;
end;
end pkg;
И это Тест работал для меня:
select * from table(pkg.b(pkg.a));
Результат:
ID NAME SAL
------ ---------- ----------
1 Mark 1000
2 Pete 1200