Czy mogę przekazać wyraźny kursor do funkcji / procedury do użycia w pętli FOR?

Mam procedurę, która wykonuje pewne obliczenia na wszystkich rekordach zwróconych przez kursor. Wygląda to trochę tak:

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;

Teraz mam przypadek, w którym muszę wykonać dokładnie te same obliczenia na innym zestawie rekordów pochodzących z innej tabeli. Jednakże mają one taki sam „kształt” jak w powyższym przykładzie.

Czy można napisać procedurę, która wygląda tak:

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;

wiem oSYS_REFCURSOR, ale zastanawiałem się, czy można użyć znacznie wygodniejszegoFOR ... LOOP składnia i niejawny typ rekordu.

questionAnswers(4)

yourAnswerToTheQuestion