カーソルが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;