Los triggers (desencadenantes, en castellano) son rutinas, procedimientos, código fuente, que se ejecutan en forma automática cuando se cumple alguna de estas condiciones:

  • Se está insertando una nueva fila
  • Se está borrando una fila
  • Se está actualizando una fila

¿Para qué sirven?

  1. Para asegurarnos que en la tabla se guarden datos válidos y solamente datos válidos.
  2. Para actualizar otra tabla cuyos datos dependen de esta tabla

Los triggers pueden «dispararse»:

  • Antes de la inserción, borrado, actualización
  • Después de la inserción, borrado, actualización

Los triggers que se disparan antes sirven para evitar que la tabla tenga datos inválidos

Los triggers que se disparan después sirven para actualizar a otras tablas cuyos datos dependen de esta tabla

Lo peor que le podría ocurrir a una tabla es tener datos inválidos o incorrectos dentro suyo. El nombre conque se conoce a dichos datos es «basura«. Si eres un buen programador, jamás permitirás que entre basura en una tabla tuya.

En los triggers se pueden usar unas «pseudo» variables llamadas NEW y OLD.

NEW nos indica el valor que tiene una columna antes de ser insertada en la tabla.

OLD nos indica el valor que tiene actualmente la columna en la tabla. O sea el valor que está grabado en ella.

NEW y OLD son muy útiles para comparar el valor que queremos introducir en una columna con el valor que ya está guardado en esa columna.

Por ejemplo, para detectar si el nuevo precio de venta es menor que el actual precio de venta podríamos escribir:

IF (NEW.PRD_PREVTA < OLD.PRD_PREVTA) THEN

Para detectar si el nuevo precio de venta es cero o menor que cero podríamos escribir:

IF (NEW.PRD_PREVTA <= 0) THEN

Para detectar si el nombre del producto está vacío podríamos escribir:

IF (CHAR_LENGTH(TRIM(NEW.PRD_NOMBRE)) = 0) THEN

Para detectar si el código del producto es NULL podríamos escribir:

IF (NEW.PRD_CODIGO IS NULL) THEN

En el caso de encontrar algún error debes elevar una EXCEPCIÓN y así conseguirás que la fila no sea insertada ni borrada ni actualizada.

Una tabla puede tener muchos triggers, el orden en que se ejecutan viene dado por el valor de POSITION. El primer trigger que se ejecuta es el que tiene POSITION 0, luego se ejecuta el que tiene POSITION 1, luego el que tiene POSITION 2, etc.

Resumiendo:

  • Los triggers son código fuente que se ejecuta automáticamente cuando se quiere:
    • Insertar una nueva fila
    • Borrar una fila
    • Actualizar una fila
  • Sirven para asegurar que en una tabla solamente se introduzcan datos válidos y para actualizar otras tablas cuyos datos dependen de esta tabla
  • Los triggers pueden dispararse:
    • Antes de la inserción, borrado, actualización
    • Después de la inserción, borrado, actualización
  • Dentro de los triggers se pueden usar dos pseudo-variables: NEW y OLD
    • NEW es el valor que tendrá la columna si se realiza la inserción o actualización exitosamente
    • OLD es el valor que actualmente tiene la columna
  • Si se encontró un error en un trigger se debe elevar una excepción para que esa fila no sea insertada ni borrada ni actualizada
  • Una tabla puede tener muchos triggers, el orden en el cual se ejecutan lo determina la variable POSITION

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21