Sembra che tu abbia confuso i cursori espliciti, ad esempio:
declare
cursor cur is
select dummy from dual;
begin
for rec in cur
loop
dbms_output.put_line(rec.dummy);
end loop;
end;
/
con un cursore di riferimento - che è un puntatore a un cursore aperto.
In genere utilizzeresti un cursore di riferimento per aprire un cursore nel db e passarlo di nuovo all'app chiamante per farlo scorrere.
Il modo in cui hai dichiarato i cursori di riferimento come parametri out e poi hai provato a scorrerli nella stessa procedura non ha senso:una volta che hai recuperato un record da un cursore, non puoi recuperarlo di nuovo.
Se devi assolutamente scorrere un cursore di riferimento, utilizzeresti questo tipo di sintassi:
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;
/
ma come ho detto, in generale, non avresti eseguito il loop dei cursori di riferimento nel db, lo faresti nel codice chiamante.
Forse se hai aggiornato la tua domanda con i requisiti che stai cercando di soddisfare, potremmo suggerirti un modo migliore per farlo.