Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
BASES DE DATOS
Administracin de Bases de Datos
Triggers
Ejecucin
La ejecucin se realiza cuando una
tabla a la que esta asociada el trigger
genera un evento, ya sea de insercin,
eliminacin o actualizacin.
Los triggers estn almacenados en
una tabla de catlogo del sistema
como parte de la propiedades de la
tabla
Son optimizados antes de la ejecucin
Que es un Trigger
Sintaxis
definicin_regla::=
{CREATE | REPLACE} TRIGGER nombre_regla
{BEFORE | AFTER | INSTEAD OF} evento
[disyuncin_eventos]
ON {nombre_relacin | nombre_vista}
[ [REFERENCING OLD AS nombre_referencia
[NEW AS nombre_referencia] ]
[FOR EACH {ROW | STATEMENT} [WHEN ( condicin ) ] ]
bloque SQL
disyuncin_eventos ::= OR evento [disyuncin_eventos]
evento ::=
INSERT | DELETE | UPDATE [OF
comalista_nombre_atributo]
DBDII Ing. Luis Reyes
Forma de Ejecucin
FOR EACH STATEMENT
BEFORE
AFTER
Eventos
BEFORE | AFTER | INSTEAD OF} evento
[disyuncin_eventos]
ON {nombre_relacin | nombre_vista}
disyuncin_eventos ::= OR evento
[disyuncin_eventos]
evento ::=
INSERT | DELETE | UPDATE [OF
comalista_nombre_atributo]
Eventos
Parametrizacin de eventos:
los eventos de las reglas FOR EACH ROW estn
parametrizados
pametrizacin implcita:
evento INSERT o DELETE: n (n grado de la relacin)
evento UPDATE: 2*n
nombre de parmetros:
evento INSERT: NEW
evento DELETE: OLD
evento UPDATE: OLD y NEW
Condiciones
WHEN (condicin)
expresin lgica de sintaxis similar a
la condicin de la clusula WHERE de
la instruccin SELECT
no puede contener subconsultas ni
funciones agregadas
slo se puede hacer referencia a los
parmetros del evento
Acciones
bloque SQL
bloque escrito en el lenguaje de
programacin de SQL
sentencias de manipulacin de la BD:
INSERT, DELETE, UPDATE,
SELECT ... INTO ...
sentencias de programa:
asignacin, seleccin, iteracin
sentencias de manejo de errores
sentencias de entrada/salida
DBDII Ing. Luis Reyes
Reglas
a)
b)
c)
Ejemplo de Auditoria
DROP TRIGGER tu_envios ;
CREATE TRIGGER tu_envios UPDATE on envios
referencing old as vieja new as nueva
FOR EACH ROW (
INSERT INTO log_envios (id_congreso,
id_trabajo, fecha, usuario, fecha_act, oper)
VALUES (nueva. id_congreso, nueva.id_trabajo,
nueva.fecha, User, today, 'U');
);
Ejemplo
CREATE TRIGGER upd_check_sueldo BEFORE UPDATE ON empleado
FOR EACH ROW
BEGIN
IF NEW.sueldo < 100 THEN
SET NEW.sueldo = 100;
ELSEIF NEW.sueldo > 10000 THEN
SET NEW.sueldo = 10000;
END IF;
IF NEW.sueldo < OLD.sueldo THEN
SET NEW.sueldo = OLD.sueldo;
END IF;
END//
En este ejemplo, si los nuevos sueldos son menores a 100 o mayores a
10,000, se dejara el valor original
Si el nuevo sueldo es menor que el que ya existe, se deja el original, pues a
nadie se le puede bajar el suelo.