Zdá se, že máte zmatené explicitní kurzory, např.:
declare
cursor cur is
select dummy from dual;
begin
for rec in cur
loop
dbms_output.put_line(rec.dummy);
end loop;
end;
/
s referenčním kurzorem - což je ukazatel na otevřený kurzor.
Obvykle byste použili referenční kurzor k otevření kurzoru v db a předali jej zpět volající aplikaci, aby prošla smyčkou.
Způsob, jakým jste deklarovali refkurzory jako out parametry a pak jste se je pokusili procházet ve stejném postupu, nedává smysl – jakmile načtete záznam z kurzoru, nemůžete jej znovu načíst.
Pokud bezpodmínečně musíte procházet referenční kurzor, použijete tento druh syntaxe:
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 jsem řekl, obecně byste neprocházeli referenční kurzory v db, ale dělali byste to ve volacím kódu.
Možná, že pokud svou otázku aktualizujete o požadavky, které se snažíte splnit, mohli bychom navrhnout lepší způsob, jak toho dosáhnout.