Triggers o Disparadores SQL

6
288736

Triggers SQL

Todos estaremos de acuerdo en que una de las cosas más importantes en todo negocio son los datos, ¿verdad?. Pues bien, imagine una base de datos sobre la que interactuan concurrentemente muchos usuarios a través de distintas aplicaciones, web o de escritorio. ¿Qué sucedería si una de estas aplicaciones gestionase los datos incorrectamente?.

Por ejemplo, imagine una aplicación de escritorio que interactua directamente a través de JDBC con la BD y que dicha aplicación usa la hora de la máquina del usuario como hora en la que se realizan las operaciones, ¿terrible, verdad?.. pues bien, estos y otros problemas pueden ser solucionados con mecanismos como los triggers o disparadores de BD (como veremos en los ejemplos).

Los triggers o disparadores son objetos de la base de datos que ejecutan acciones cuando se producen ciertos eventos (tanto DML como DDL) (inserciones, modificaciones, borrados, creación de tablas, etc).

A continuación y a modo de consulta os voy a mostrar un ejemplo de un Trigger DML que realiza las siguientes tareas:
Dada una tabla con información sobre «expedientes», vamos a crear un Trigger que controle las modificaciones del «estado del expediente» de la siguiente manera:

  1. Anotará en el campo «stateChangedDate» la fecha/hora en la que se produjo un cambio de estado.
  2. A modo de histórico, insertará un registro en tabla «expStatusHistory» con información sobre los cambios de estado de cada expediente.

Fácil ¿verdad?, pues bueno, mamos a la obra.

Ejemplo en MySql.

Ejemplo en SQLServer.

Si ahora modificasemos un registro a través de una sentencia como la siguiente el Trigger sería ejecutado y realizaría su trabajo.

Cabe destacar que en este tema se puede ir mucho más allá, pero bueno a modo didáctico y recordatorio están bastante bien artículos de este tipo.

Referencias

Despedida

Bueno, espero que os haya servido de utilidad este pequeño tutorial, yo personalmente lo usaré a modo de consulta, pues hay veces que uno se tira mucho tiempo en otros entornos y luego vienen bien estos tutoriales para refrescar la memoria ;-).

Carlos García Pérez. Creador de MobileTest, un complemento educativo para los profesores y sus alumnos.

cgpcosmad@gmail.com

6 Comentarios

  1. Saludos,
    Actualmente hay un ERP funcionando en la empresa para ser mas exacto es un Jedward y del cual necesito extraer y luego colocar datos desde sqlserver. Me podrian dar una idea de por donde empezar por favor?… En el JD estan los datos y lo que se desea es hacer una interface de conexion para poder extarer y luego colocar datos.
    Agrdezco de antemano su ayuda.

  2. Hola buenas tardes.

    ¿Ustedes pueden ayudarme para saber como crear un trigger de oracle?
    tengo varios ejemplos que he generado pero ninguno me ha servido.

    En el caso de que sea afirmativa su respuesta, pueden avisarme por favor para enviarle mis ejemplos.

    Saludos y gracias.

  3. Buenos dias como puedo hacer que un trigger me devuelva un valor para saber si en mi formulario hubo cambios ejecutar la sentencia update en caso que no haya cambios..
    intente hacer con este me funciona
    USE db_RR_HH;
    DELIMITER $$
    CREATE DEFINER=root@localhost TRIGGER verif_cambios_personas
    BEFORE UPDATE ON personas
    FOR EACH ROW
    BEGIN
    — ¿Ha cambiado el estado?
    IF NEW.Nombre = OLD.Nombre ||
    NEW.SegundoNombre = OLD.SegundoNombre ||
    NEW.Apellido = OLD.Apellido ||
    NEW.SegundoApellido = OLD.SegundoApellido ||
    NEW.CI = OLD.CI ||
    NEW.FechaNac = OLD.FechaNac ||
    NEW.FechaNac = OLD.FechaNac ||
    NEW.FechaNac = OLD.FechaNac ||
    NEW.FechaNac = OLD.FechaNac ||
    NEW.FechaNac = OLD.FechaNac ||
    NEW.FechaNac = OLD.FechaNac ||
    NEW.FechaNac = OLD.FechaNac
    then
    SIGNAL sqlstate ‘45001’ set message_text = «No way ! You cannot do this !»;
    end if;
    END

    pero lo que necesito es solo que me mande un valor para que por ejemplo si no hubo cambios no ejecute la sentencia update y solo me habilite los botones de Telefonos de Contacto y
    Direcciones, y si hubo cambios que actualice los datos y luego habilite esos Botones intente tambien hacer con programacion pero aun no me sale ..

Dejar respuesta

Please enter your comment!
Please enter your name here