Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

buscar da função retornando um cursor de referência para gravar


Eu suspeito que você acha que seu cursor deveria estar buscando linhas do REFCURSOR. Não é. O REFCURSOR é em si um cursor, você não usa outro cursor para selecionar a partir dele.

O que seu cursor atual está fazendo é buscar uma única linha, com uma única coluna, contendo o resultado da chamada da função. Que é um record_cursor não é um record_name , então você obtém uma incompatibilidade de tipo.

Eu suspeito que o que você realmente quer fazer é algo assim:
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;