Parece que has confundido los cursores explícitos, por ejemplo:
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 cursor de referencia, que es un puntero a un cursor abierto.
Por lo general, usaría un cursor de referencia para abrir un cursor en la base de datos y devolverlo a la aplicación de llamada para que se repita.
La forma en que ha declarado los cursores de referencia como parámetros de salida y luego ha intentado recorrerlos en el mismo procedimiento no tiene sentido:una vez que ha obtenido un registro de un cursor, no puede volver a obtenerlo.
Si absolutamente debe recorrer un cursor de referencia, usaría este tipo de sintaxis:
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;
/
pero como dije, en general, no estaría recorriendo los cursores de referencia en la base de datos, estaría haciendo eso en el código de llamada.
Quizás si actualizó su pregunta con los requisitos que está tratando de cumplir, podríamos sugerirle una mejor manera de hacerlo.