U lijkt verwarde expliciete cursors te hebben, bijvoorbeeld:
declare
cursor cur is
select dummy from dual;
begin
for rec in cur
loop
dbms_output.put_line(rec.dummy);
end loop;
end;
/
met een ref-cursor - wat een aanwijzer is naar een geopende cursor.
Normaal gesproken zou je een ref-cursor gebruiken om een cursor in de db te openen en deze terug te geven aan de aanroepende app zodat deze kan doorlopen.
De manier waarop je de ref-cursors als out-parameters hebt gedeclareerd en ze vervolgens in dezelfde procedure hebt geprobeerd te doorlopen, is niet logisch - als je eenmaal een record van een cursor hebt gehaald, kun je het niet opnieuw ophalen.
Als je absoluut door een ref-cursor moet lopen, zou je dit soort syntaxis gebruiken:
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;
/
maar zoals ik al zei, in het algemeen zou je niet door ref-cursors in de db lopen, je zou dat doen in de aanroepende code.
Als u uw vraag heeft bijgewerkt met de vereisten waaraan u probeert te voldoen, kunnen we misschien een betere manier voorstellen om dit te doen.