Oracle
 sql >> Database >  >> RDS >> Oracle

recupera dalla funzione che restituisce un cursore di riferimento da registrare

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;