Posso passar um cursor explícito para uma função / procedimento para uso no loop FOR?

Eu tenho um procedimento que executa alguns cálculos em todos os registros retornados por um cursor. Parece um pouco assim:

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;

Agora eu tenho o caso em que preciso executar exatamente o mesmo cálculo em um conjunto diferente de registros que vêm de uma tabela diferente. No entanto, estes têm a mesma "forma" como no exemplo acima.

É possível escrever um procedimento assim:

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;

Eu sei sobreSYS_REFCURSOR, mas eu queria saber se era possível usar o muito mais convenienteFOR ... LOOP sintaxe e tipo de registro implícito.

questionAnswers(4)

yourAnswerToTheQuestion