Sospecho que cree que su cursor debería estar obteniendo filas del REFCURSOR. No es. El REFCURSOR es en sí mismo un cursor, no usa otro cursor para seleccionarlo.
Lo que está haciendo su cursor actual es obtener una sola fila, con una sola columna, que contiene el resultado de la llamada a la función. Que es un record_cursor
no es un record_name
, por lo que obtiene una discrepancia de tipos.
Sospecho que lo que realmente quieres hacer es algo como esto:
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;