Wygląda na to, że pomyliłeś wyraźne kursory, np.:
declare
cursor cur is
select dummy from dual;
begin
for rec in cur
loop
dbms_output.put_line(rec.dummy);
end loop;
end;
/
z kursorem ref - który jest wskaźnikiem do otwartego kursora.
Zwykle użyjesz kursora ref, aby otworzyć kursor w bazie danych i przekazać go z powrotem do aplikacji wywołującej, aby mogła przejść przez nią w pętli.
Sposób, w jaki zadeklarowałeś kursory referencyjne jako parametry wyjściowe, a następnie próbowałeś przejść przez nie w pętli w tej samej procedurze, nie ma sensu - po pobraniu rekordu z kursora nie możesz go ponownie pobrać.
Jeśli koniecznie musisz przejść przez kursor ref, użyj tego rodzaju składni:
declare
cur sys_refcursor;
rec dual%rowtype;
begin
open cur for select dummy from dual;
loop
fetch cur into rec;
exit when cur%notfound;
dbms_output.put_line(rec.dummy);
end loop;
end;
/
ale jak powiedziałem, ogólnie rzecz biorąc, nie będziesz przechodził przez kursory ref w bazie danych, zrobiłbyś to w kodzie wywołującym.
Być może po zaktualizowaniu swojego pytania o wymagania, które próbujesz spełnić, możemy zaproponować lepszy sposób na zrobienie tego.