Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/07/2009, 08:16
rocolobo7
 
Fecha de Ingreso: julio-2009
Mensajes: 6
Antigüedad: 14 años, 10 meses
Puntos: 0
Deshabilitar trigger

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