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
Ejemplos de Triggers
MySQL Triggers
(Download MySQL Sample Database)
Tarea online
Más información:
Documentación de MariaDB: Trigger Overview
Cómo administrar y usar triggers en MySQL
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.