Tengo un procedimiento que realiza algunos cálculos en todos los registros devueltos por un cursor. Se ve un poco como esto:¿Puedo pasar un cursor explícito a una función/procedimiento para usar en el ciclo 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;
ahora tengo el caso en el que necesito para llevar a cabo el mismo cálculo exacto sobre 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 tiene este aspecto:
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;
que sé sobre SYS_REFCURSOR
, pero me preguntaba si era posible utilizar el mucho más conveniente FOR ... LOOP
sintaxis y la implícita tipo de registro.
Gracias Vasily, no estaba segura de PL/SQL podría manejar ese nivel de mecanografía structual, pero funciona como un encanto! :-) –
Sea bienvenido) –
hi @VasilyKomarov .. ¿Qué pasa si la instrucción cursor tiene un parámetro que pasa como entrada a todas las funciones y procedimientos en el paquete ... como por ejemplo ... cursor c es seleccionar 1 como uno, 2 como dos desde dual donde row = row_id; donde row_id es el parámetro – thealchemist