martes, 27 de enero de 2015

Disparadores Compuestos (Compound Triggers)

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