Los Disparadores Compuestos o Compound Triggers son una nueva herramienta para apoyar en la codificación reducida y la interactividad entre objetos en Base de datos. Combina los cuatro eventos de activación en una sola pieza de código. Además de la eficacia de la codificación, que aborda algunos problemas como:
- Error en Tablas mutantes (ORA-04091)
- Cuando se usa Trigger con EACH ROW que por cada fila hacer alguna transacción en alguna otra tabla utilizando nuevos valores.
Anteriormente, las soluciones alternativas para estos problemas contenía codificación compleja utilizando colecciones y múltiples Disparadores. Lo cual se convierte en pesadilla para los desarrolladores para simular y probar tales escenarios.
Los Disparadores Compuestos tratan fácilmente con todos los escenarios anteriores de una manera eficiente e interactiva. La nueva función en Base datos Oracle 11g no sólo aumenta el rendimiento durante las operaciones en masa, también mejora el estado de sus variables y el rendimiento en las consultas. Ellos se restablecen sólo al comienzo de una nueva declaración. Un punto importante a mencionar aquí es el manejo de excepciones. Se tiene que ser manejado de forma explícita en todos los bloques de sincronización, y no en el cuerpo del Trigger.
La sintaxis de un Disparador Compuesto contiene cuatro bloques que representan cuatro tiempos asociados con eventos DML de la siguiente forma:
CREATE OR REPLACE TRIGGER
compound_trigger_name
FOR INSERT | DELETE UPDATE OF column ON table COMPOUND TRIGGER
-- Sección declaratica
(optional)
-- Variables se declaran
durante el Trigger
--Ejecución antes de una
consulta DML
BEFORE STATEMENT IS
BEGIN
NULL;
END BEFORE STATEMENT;
--
Ejecución antes de cada fila, variables :NEW, :OLD son permitidas
BEFORE EACH ROW IS
BEGIN
NULL;
END BEFORE EACH ROW;
-- Ejecución despues de cada
fila, variables :NEW, :OLD son permitidas
AFTER EACH ROW IS
BEGIN
NULL;
END AFTER EACH ROW;
--Ejecución despues de una
consulta DML
AFTER STATEMENT IS
BEGIN
NULL;
END AFTER STATEMENT;
END compound_trigger_name;
No hay comentarios:
Publicar un comentario