2009-10-17 23 views
11

Quiero configurar un trigger para que si en una actualización el campo de predicción es = 3, el trigger cambie el valor a 4 y lo guarde en la base de datos. El disparador está abajo.mysql trigger trigger almacenado ya es utilizado por instrucción que invocó trigger

Por alguna razón Me aparece un error que dice:

#1442 - Can't update table 'tzanalytic\_forecast\_cached' in stored 
function/trigger because it is already used by statement which invoked 
this stored function/trigger. 

¿Es esta configurado de la manera correcta?

delimiter $$ 
CREATE TRIGGER no_BoW BEFORE UPDATE ON t FOR EACH ROW 
BEGIN set @prediction = new.prediction; 
UPDATE t SET t.prediction = (SELECT IF(@prediction = '3', '4', @prediction)) WHERE t.event_id = new.event_id AND t.price_tier = new.price_tier; END; 
$$ delimiter ; 

Respuesta

41

desencadenantes MySQL no puede manipular la tabla que están asignados. Todos los demás principales DBMS soportan esta característica, así que con suerte MySQL agregará este soporte pronto.

http://forums.mysql.com/read.php?99,122354,240978#msg-240978

+0

Gracias :) - Me ayudaste – Skeen

+1

Y a mí, eso es un error muy molesto – jdborg

+8

todos los días odio a mysql más –

0

Además, es necesario asegurarse de que usted no tiene otros procedimientos o funciones que realizan actualizaciones en la tabla que este procedimiento en particular sea asignado o que terminan en una recursión. Por ejemplo

create trigger trig1 After update on table1 FOR EACH ROW 
BEGIN 
UPDATE table2 SET colum1 = column1 + 1 
END; 

create trigger trig2 After update on table2 FOR EACH ROW 
BEGIN 
UPDATE table1 SET colum2 = column2 + 1 
END; 

Esto va a terminar en una recursión así que cuidado de los procedimientos y funciones existentes almacenado.