Recientemente, encontré un gatillo BEFORE INSERT OR UPDATE
en una tabla. En este desencadenador, el autor se basa en las funciones INSERTING
y UPDATING
(ambos devuelven un BOOLEAN
) del paquete DBMS_STANDARD
para determinar si el desencadenador se disparó antes de una inserción o antes de una actualización.¿Deberían utilizarse procedimientos y/o funciones del paquete DBMS_STANDARD en el código PL/SQL?
Por ejemplo:
CREATE OR REPLACE TRIGGER CUSTOMER_TRIGGER
BEFORE INSERT OR UPDATE ON CUSTOMER
FOR EACH ROW
BEGIN
IF INSERTING THEN
/* Some code */
END IF;
IF UPDATING THEN
/* Some other code */
END IF;
END;
Sí, sé que dos, disparadores individuales podrían haber sido escritos para manejar los dos eventos por separado. Ese no es el punto de esta pregunta.
Después de solucionar un error que recibían estas funciones, recibimos la información (del Soporte de Oracle) de que "las rutinas dbms_standard realmente no deben ser llamadas por los programas del usuario". ¿Es esto cierto?
Me parece un poco extraño, teniendo en cuenta que otros procedimientos (como RAISE_APPLICATION_ERROR
y COMMIT
) se utilizan comúnmente en el código PL/SQL.
¿Tiene una nota de metalink u otra cosa que el público (o al menos el público con licencia de Oracle) pueda ver? Y si no se usan las llamadas INSERTING/UPDATING a STANDARD en los desencadenantes, ¿exactamente cuándo se usarían? –
@ Adam: No, este consejo no proviene de una nota de Metalink. Por el contrario, proviene directamente de Oracle Support en una solicitud de servicio. –