Изглежда, че сте объркали изричните курсори, напр.:
declare
cursor cur is
select dummy from dual;
begin
for rec in cur
loop
dbms_output.put_line(rec.dummy);
end loop;
end;
/
с референтен курсор - който е указател към отворен курсор.
Обикновено бихте използвали референтен курсор, за да отворите курсор в db и да го върнете обратно към извикващото приложение, за да премине през него.
Начинът, по който сте декларирали референтните курсори като изходящи параметри и след това сте се опитали да преминете през тях в същата процедура, няма смисъл - след като сте извлекли запис от курсор, не можете да го извлечете отново.
Ако абсолютно трябва да преминете през референтен курсор, бихте използвали този вид синтаксис:
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;
/
но както казах, по принцип няма да преминавате през референтните курсори в db, ще правите това в извикващия код.
Може би, ако актуализирате въпроса си с изискванията, които се опитвате да изпълните, бихме могли да предложим по-добър начин да го направите.