Kann ich einen expliziten Cursor an eine Funktion / Prozedur zur Verwendung in der FOR-Schleife übergeben?

Ich habe eine Prozedur, die einige Berechnungen für alle Datensätze durchführt, die von einem Cursor zurückgegeben werden. Es sieht ungefähr so ​​aus:

PROCEDURE do_calc(id table.id_column%TYPE)
IS
  CURSOR c IS
    SELECT col1, col2, col3
      FROM table
     WHERE ...;
BEGIN
  FOR r IN c LOOP
    -- do some complicated calculations using r.col1, r.col2, r.col3 etc.
  END LOOP;
END;

Jetzt muss ich genau dieselbe Berechnung für eine andere Gruppe von Datensätzen ausführen, die aus einer anderen Tabelle stammen. Diese haben jedoch die gleiche "Form" wie im obigen Beispiel.

Ist es möglich, eine Prozedur zu schreiben, die so aussieht:

PROCEDURE do_calc2(c some_cursor_type)
IS
BEGIN
  FOR r IN c LOOP
    -- do the calc, knowing we have r.col1, r.col2, r.col3, etc.
  END LOOP;
END;

ich weiss BescheidSYS_REFCURSOR, aber ich habe mich gefragt, ob es möglich ist, die viel bequemer zu verwendenFOR ... LOOP Syntax und impliziter Datensatztyp.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage