Sospetto che tu pensi che il tuo cursore dovrebbe recuperare le righe dal REFCURSOR. Non è. Il REFCURSOR è esso stesso un cursore, non usi un altro cursore per selezionarlo.
Quello che sta facendo il tuo cursore attuale è recuperare una singola riga, con una singola colonna, contenente il risultato della chiamata di funzione. Che è un record_cursor
non un record_name
, quindi ottieni una mancata corrispondenza del tipo.
Sospetto che quello che vuoi davvero fare sia qualcosa del genere:
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;