2009-10-17 6 views
11

Voglio impostare un trigger in modo che se su un aggiornamento il campo di previsione è = 3, il trigger modifica il valore su 4 e lo salva nel database. Il grilletto è sotto.Il trigger memorizzato mysql trigger è già utilizzato dall'istruzione che ha richiamato il trigger memorizzato

Per qualche ragione Continuo a ricevere un errore che 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. 

È questo impostato nel modo giusto?

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 ; 

risposta

41

I trigger di MySQL non possono modificare la tabella a cui sono assegnati. Tutti gli altri principali DBMS supportano questa funzione, quindi spero che MySQL aggiungerà presto questo supporto.

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

+0

Grazie :) - Mi hai aiutato – Skeen

+1

E io, questo è un bug molto fastidioso – jdborg

+8

ogni giorno odio mysql di più –

0

Inoltre, è necessario assicurarsi che non si dispone di altre procedure o funzioni che eseguono gli aggiornamenti sul tavolo che questa procedura particolare è assegnato o si finisce in una ricorsione. Per esempio

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; 

Questo si concluderà con una ricorsione, quindi fai attenzione alle stored procedure e alle funzioni esistenti.