¿Puedo pasar un cursor explícito a una función / procedimiento para usar en el ciclo FOR?

Tengo un procedimiento que realiza algunos cálculos en todos los registros devueltos por un cursor. Se ve un poco así:

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;

Ahora tengo el caso en el que necesito realizar el mismo cálculo exacto en un conjunto diferente de registros que provienen de una tabla diferente. Sin embargo, estos tienen la misma "forma" que en el ejemplo anterior.

¿Es posible escribir un procedimiento que se vea así:

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;

Se acerca deSYS_REFCURSOR, pero me preguntaba si era posible usar el mucho más convenienteFOR ... LOOP Sintaxis y tipo de registro implícito.

Respuestas a la pregunta(4)

Su respuesta a la pregunta