Oracle
 sql >> Datenbank >  >> RDS >> Oracle

fetch from Funktion, die einen Ref-Cursor zum Aufzeichnen zurückgibt

Ich vermute, dass Sie denken, dass Ihr Cursor Zeilen aus dem REFCURSOR abrufen sollte. Es ist nicht. Der REFCURSOR ist selbst ein Cursor, Sie verwenden keinen anderen Cursor, um daraus auszuwählen.

Ihr aktueller Cursor ruft eine einzelne Zeile mit einer einzelnen Spalte ab, die das Ergebnis des Funktionsaufrufs enthält. Das ist ein record_cursor kein record_name , sodass Sie einen Typenkonflikt erhalten.

Ich vermute, was Sie wirklich wollen, ist so etwas:

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;