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.