Я подозреваю, что вы думаете, что ваш курсор должен извлекать строки из 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;