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:

How To Use Triggers in MySQL

Libro: MySQL: Triggers, Funciones y Procedimientos

How To Use MySQL Triggers

Triggers en Oracle:

Disparadores (Triggers) en Oracle

 

Deja una respuesta