Sie scheinen explizite Cursor verwechselt zu haben, z. B.:
declare
cursor cur is
select dummy from dual;
begin
for rec in cur
loop
dbms_output.put_line(rec.dummy);
end loop;
end;
/
mit einem Ref-Cursor - der ein Zeiger auf einen offenen Cursor ist.
Sie würden normalerweise einen ref-Cursor verwenden, um einen Cursor in der Datenbank zu öffnen und ihn an die aufrufende App zurückzugeben, damit er eine Schleife durchläuft.
Die Art und Weise, wie Sie die ref-Cursor als Ausgangsparameter deklariert haben und dann versucht haben, sie in derselben Prozedur zu durchlaufen, ist nicht sinnvoll - sobald Sie einen Datensatz von einem Cursor abgerufen haben, können Sie ihn nicht erneut abrufen.
Wenn Sie unbedingt einen Ref-Cursor durchlaufen müssen, verwenden Sie diese Art von Syntax:
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;
/
aber wie ich schon sagte, würden Sie im Allgemeinen keine Ref-Cursor in der Datenbank durchlaufen, sondern im aufrufenden Code.
Wenn Sie Ihre Frage mit den Anforderungen, die Sie zu erfüllen versuchen, aktualisiert haben, könnten wir vielleicht einen besseren Weg vorschlagen, dies zu tun.