Triggers
Cómo usar triggers
Programación de Bases de Datos (6.4.- Disparadores en MySQL)
Trigger para subir el salario, si supera 100 horas trabajadas en todos sus proyectos:
DELIMITER $$ CREATE TRIGGER subir_salario AFTER INSERT ON trabaja FOR EACH ROW BEGIN /*Declaración de variable local */ DECLARE totalHoras INT; /*Obtenemos la suma de horas del empleado en los proyectos donde trabaja */ SELECT SUM(nhoras) INTO totalHoras FROM trabaja WHERE cdemp = NEW.cdemp; /*Si supera las 100 horas trabajadas, incrementamos su salario */ IF totalHoras > 100 THEN UPDATE empleado SET salario = salario + 50 WHERE cdemp = NEW.cdemp; END IF; END $$ DELIMITER ;
Ejecución:
Le asignamos 150 horas al empleado A14 en el proyecto MES
SELECT nombre, salario FROM empleado WHERE cdemp = 'A14'; INSERT INTO trabaja VALUES('A14', 'MES', 150); SELECT nombre, salario FROM empleado WHERE cdemp = 'A14';
Le asignamos 10 horas al empleado A03 en proyecto DAG
SELECT nombre, salario FROM empleado WHERE cdemp = 'A03'; INSERT INTO trabaja VALUES('A03', 'DAG', 10); SELECT nombre, salario FROM empleado WHERE cdemp = 'A03';
Trigger para impedir eliminar un proyecto en trabaja si solo queda un trabajador en el proyecto (como mínimo cada proyecto debe tener un empleado trabajando en él)
DELIMITER $$ CREATE OR REPLACE TRIGGER eliminar BEFORE DELETE ON trabaja FOR EACH ROW BEGIN DECLARE cuenta INT; SELECT COUNT(*) into cuenta FROM trabaja WHERE cdpro = OLD.cdpro GROUP BY cdpro; IF (cuenta = 1) THEN SIGNAL SQLSTATE '45001' SET MESSAGE_TEXT = 'No puede haber menos de 1 trabajador por proyecto'; END IF; END $$ DELIMITER ;
Ejecución
-- Eliminar un empleado que trabaja en el proyecto MES DELETE FROM trabaja WHERE cdpro = 'MES' AND cdemp = 'A03'; -- Eliminar otro empleado que trabaja en el proyecto MES DELETE FROM trabaja WHERE cdpro = 'MES' AND cdemp = 'A11';
Triggers en MySQL
Cómo crear y utilizar Triggers en MySQL
Cómo administrar y usar triggers en MySQL
Ejemplos de Triggers
MySQL Triggers
Tarea online
Más información:
Libro: MySQL: Triggers, Funciones y Procedimientos
Triggers en Oracle:
Disparadores (Triggers) en Oracle
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.