Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE FUNCTION comprovar_fechas_salarios (from_date DATE, to_date DATE, empleado INT(11)) RETURNS TINYINT(1) DETERMINISTIC
- BEGIN
- DECLARE respuesta TINYINT(1) DEFAULT 1;
- DECLARE done INT(1) DEFAULT 0;
- DECLARE old_from_d DATE;
- DECLARE old_to_d DATE;
- DECLARE emp_n INT(11);
- DECLARE salary INT(11);
- DECLARE salarios_emp CURSOR FOR SELECT * from salaries where emp_no = empleado;
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
- OPEN salarios_emp;
- l1:LOOP
- FETCH salarios_emp INTO emp_n, salary, old_from_d, old_to_d;
- IF done = 1 OR respuesta = 0 THEN
- CLOSE salarios_emp;
- LEAVE l1;
- END IF;
- IF from_date BETWEEN old_from_d AND old_to_d THEN
- SET respuesta = 0;
- END IF;
- IF to_date BETWEEN old_from_d AND old_to_d THEN
- SET respuesta = 0;
- END IF;
- IF from_date < old_from_d AND to_date > old_to_d THEN
- SET respuesta=0;
- END IF;
- END LOOP l1;
- RETURN respuesta;
- END;
- CREATE TRIGGER salario_ins BEFORE INSERT ON salaries FOR EACH ROW
- BEGIN
- IF comprovar_fechas_salarios (new.from_date, new.to_date, new.emp_no) = 0 THEN
- SIGNAL SQLSTATE '45000' SET message_text = "FECHAS SOLAPADAS";
- END IF;
- END;
- CREATE TRIGGER salario_upd BEFORE UPDATE ON salaries FOR EACH ROW
- BEGIN
- IF comprovar_fechas_salarios (new.from_date, new.to_date, new.emp_no) = 0 THEN
- SIGNAL SQLSTATE '45000' SET message_text = "FECHAS SOLAPADAS";
- END IF;
- END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement