sql >> Base de Datos >  >> RDS >> Oracle

recuperar de la función que devuelve un cursor de referencia para grabar

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;