Saltar la navegación

5.- Disparadores.

Caso práctico

Ilustración en la que se representa un chico rodeado de muchas columnas y una tira de papel con algún texto se extiende por entre todas las columnas.
ITE (Loren) (Uso educativo nc)



Juan y María ya han hecho un paquete en el que tienen agrupadas las funciones más usuales que realizan sobre la base de datos de juegos on-line. Sin embargo, María ve que hay cosas que aún no pueden controlar. Por ejemplo, María quiere que la clave y el usuario de un jugador o jugadora no puedan ser la misma y eso no sabe cómo hacerlo. Juan le dice que para ese cometido están los disparadores y sin más dilaciones se pone a explicarle a María para qué sirven y cómo utilizarlos.

En este apartado vamos a tratar una herramienta muy potente e importante proporcionada por PL/SQL para programar nuestra base de datos y mantener la integridad y seguridad que son los disparadores o triggers en inglés.

Pero, ¿qué es un disparador?

Un disparador no es más que un procedimiento que es ejecutado cuando se realiza alguna sentencia sobre la BD,  o sus tablas, y bajo unas circunstancias establecidas a la hora de definirlo.

Los disparadores pueden ser de tres tipos:

  • De tablas
  • De sustitución 
  • De sistema

Un disparador puede ser lanzado antes o después de realizar la operación que lo lanza. Por lo que tendremos disparadores BEFORE y disparadores AFTER.

Disparadores de Tablas

Normalmente previenen transacciones erróneas o nos permiten implementar restricciones de integridad o seguridad, o automatizar procesos. Son los más utilizados. 

Se ejecutan cuando se realiza alguna sentencia de manipulación de datos sobre una tabla dada. Puede ser lanzado al insertar, al actualizar o al borrar de una tabla, por lo que tendremos disparadores INSERT, UPDATE o DELETE (o mezclados).

Puede ser lanzado una vez por sentencia (FOR STATEMENT) o una vez por cada fila a la que afecta (FOR EACH ROW). Por lo que tendremos disparadores de sentencia y disparadores de fila.

De sustitución

No se ejecutan ni antes ni después, sino en lugar de (se conocen como triggers INSTEAD OF). Sólo se pueden asociar a vistas y a nivel de fila.

De sistema

Se ejecutan cuando se produce una determinada operación sobre la BD, se crea una tabla, se conecta un usuario, etc. Los eventos que se pueden detectar son por ejemplo: LOGON, LOGOFF, CREATE, DROP, etc y el momento puede ser tanto BEFORE  como AFTER.

Un disparador no es más que un procedimiento y  puede ser usado para:

  • Llevar a cabo auditorías sobre la historia de los datos en nuestra base de datos.
  • Garantizar complejas reglas de integridad.
  • Automatizar la generación de valores derivados de columnas.
  • Etc.

Cuando diseñamos un disparador debemos tener en cuenta que:

  • No debemos definir disparadores que dupliquen la funcionalidad que ya incorpora Oracle.
  • Debemos limitar el tamaño de nuestros disparadores, y si estos son muy grandes codificarlos por medio de subprogramas que sean llamados desde el disparador.
  • Cuidar la creación de disparadores recursivos.

Autoevaluación

Pregunta

En PL/SQL sólo podemos definir disparadores de fila.

Respuestas

Verdadero.

Falso.

Retroalimentación


Pregunta

La diferente entre un disparador de fila y uno de sentencia es que el de fila es lanzado una vez por fila a la que afecta la sentencia y el de sentencia es lanzado una sola vez.

Respuestas

Verdadero.

Falso.

Retroalimentación