Могу ли я передать явный курсор в функцию / процедуру для использования в цикле 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
синтаксис и неявный тип записи.