Você parece ter cursores explícitos confusos, por exemplo:
declare
cursor cur is
select dummy from dual;
begin
for rec in cur
loop
dbms_output.put_line(rec.dummy);
end loop;
end;
/
com um cursor ref - que é um ponteiro para um cursor aberto.
Você normalmente usaria um cursor ref para abrir um cursor no banco de dados e passá-lo de volta para o aplicativo de chamada para que ele faça um loop.
A maneira como você declarou os cursores ref como parâmetros de saída e, em seguida, tentou percorrê-los no mesmo procedimento não faz sentido - depois de buscar um registro de um cursor, você não pode buscá-lo novamente.
Se você absolutamente precisar percorrer um cursor ref, usaria este tipo de sintaxe:
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;
/
mas como eu disse, em geral, você não estaria percorrendo os cursores ref no banco de dados, você estaria fazendo isso no código de chamada.
Talvez, se você atualizou sua pergunta com os requisitos que está tentando atender, possamos sugerir uma maneira melhor de fazer isso.