Можно ли явно передать курсор функции/процедуре для использования в цикле FOR?

У меня есть процедура, которая выполняет некоторые вычисления для всех записей, возвращаемых курсором. Это выглядит примерно так:

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;

Теперь у меня есть случай, когда мне нужно выполнить точно такое же вычисление для другого набора записей из другой таблицы. Однако они имеют ту же «форму», что и в приведенном выше примере.

Можно ли написать процедуру, которая выглядит так:

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;

Я знаю о SYS_REFCURSOR, но мне было интересно, можно ли использовать гораздо более удобную FOR ... Синтаксис LOOPи неявный тип записи.

9
задан David Sykes 17 May 2012 в 23:40
поделиться