¿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.