Buenas tardes. Alguien me puede decir, por favor, como deshabilitar un trigger en MySQL 5.0? Desde un procedimiento almacenado cambio varios campos de la tabla que contiene el trigger y el trigger se vuelve a lanzar. El trigger que tengo definido es el siguiente:
DELIMITER $$
CREATE TRIGGER Actualizar BEFORE DELETE ON peticiones
FOR EACH ROW BEGIN
IF (DISABLE_TRIGGERS IS NULL) THEN
UPDATE tipos_de_peticiones SET tipos_de_peticiones.cantidad = tipos_de_peticiones.cantidad - 1
WHERE Left(tipos_de_peticiones.identificador,3) = Left(OLD.identificador,3);
INSERT INTO tabla_auxiliar (id, Identificador) VALUES (OLD.id, OLD.Identificador);
END IF;
END $$
DELIMITER;
Como veis está definido cuando elimino y no cuando actualizo. Por eso no entiendo que se ejecute el trigger.
El procedimiento almacenado es el siguiente:
DELIMITER $$
CREATE PROCEDURE ReOrdenar()
BEGIN
DECLARE done INTEGER DEFAULT 0;
DECLARE a CHAR(10);
DECLARE b INTEGER;
DECLARE c CHAR(255);
DECLARE cur1 CURSOR FOR SELECT id, Identificador FROM tabla_auxiliar;
DECLARE cur2 CURSOR FOR SELECT id FROM tabla_auxiliar;
DECLARE cur3 CURSOR FOR SELECT Max(id) FROM peticiones;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur1;
OPEN cur2;
OPEN cur3;
SET DISABLE_TRIGGERS=1;
FETCH cur1 INTO b,a;
REPEAT
UPDATE peticiones SET peticiones.identificador = Concat(Left(peticiones.identificador,4),RTRIM(SUBS TRING(peticiones.identificador,5))-1)
WHERE peticiones.id > b and Left(peticiones.identificador,3)=Left(a,3);
DELETE FROM historico_descripcion WHERE historico_descripcion.id_peticion=b;
FETCH cur1 INTO b,a;
UNTIL done END REPEAT;
FETCH cur2 INTO b;
REPEAT
UPDATE peticiones SET peticiones.id = peticiones.id - 1
WHERE peticiones.id >= b;
UPDATE historico_descripcion SET historico_descripcion.id_peticion = historico_descripcion.id_peticion - 1
WHERE historico_descripcion.id_peticion >= b;
FETCH cur2 INTO b;
UNTIL done END REPEAT;
FETCH cur3 INTO b;
ALTER TABLE peticiones AUTO_INCREMENT=b+1;
SELECT MAX(id) FROM peticiones FOR UPDATE;
DELETE FROM tabla_auxiliar;
CLOSE cur1;
CLOSE cur2;
CLOSE cur3;
SET DISABLE_TRIGGERS=NULL;
END $$
DELIMITER;
Muchas gracias a todo por vuestro tiempo. Saludos