Es cierto que el bulk es más eficiente que los cursores convencionales, pero también tiene sus desventajas, la principal es que sube los registros a un array de memoria en la PGA, y por esto pueden pasar dos cosas, que el tamaño de la PGA sea insuficiente y el proceso termine con error, o que el proceso consuma la mayoría de la PGA y no deje lugar para los demás usuarios, si bien esto se puede controlar con el LIMIT, la solución es relativa porque no todas las PGA's son iguales y un proceso puede funcionar bien en desarrollo y mal en producción.
Si entendí bien la lógica del proceso, puedes evitar el bulk con la consulta:
Código:
PROCEDURE APPAnual
INSERT INTO
APLICA( AP.id, AP.numero, AP.cont, AP.n_serial, AP.c_serv, AP.u_alta, AP.f_alta, AP.u_baja,AP.f_baja)
SELECT app_seq.NEXTVAL, AP.numero, AP.cont, AP.n_serial, AP.c_serv, AP.u_alta, sysdate, null
FROM APLICA AP
WHERE
TO_CHAR(AP.F_ALTA,'YYYY') = TO_CHAR(SYSDATE,'YYYY')-1
AND AP.U_BAJA IS NULL
AND AP.F_BAJA IS NULL;
UPDATE aplica A
SET
A.u_baja = A.u_baja,
A.f_baja = SYSDATE
WHERE
TO_CHAR(A.F_ALTA,'YYYY') = TO_CHAR(SYSDATE,'YYYY')-1
AND AP.U_BAJA IS NULL
AND AP.F_BAJA IS NULL;
END;
Saludos