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.