Подозирам, че мислите, че вашият курсор трябва да извлича редове от REFCURSOR. Не е. REFCURSOR сам по себе си е курсор, не използвате друг курсор, за да изберете от него.
Това, което прави текущият ви курсор, е да извлича един ред с една колона, съдържаща резултата от извикването на функцията. Което е record_cursor
не е record_name
, така че получавате несъответствие на типа.
Подозирам, че това, което наистина искате да направите, е нещо подобно:
declare
symbol_cursor package_name.record_cursor;
symbol_record package_name.record_name;
begin
symbol_cursor := package_name.function_name('argument');
loop
fetch symbol_cursor into symbol_record;
exit when symbol_cursor%notfound;
-- Do something with each record here, e.g.:
dbms_output.put_line( symbol_record.field_a );
end loop;
CLOSE symbol_cursor;
end;