2009-10-17 10 views
11

Chcę ustawić wyzwalacz, aby przy aktualizacji pole predykcyjne było równe = 3, wówczas wyzwalacz zmienia wartość na 4 i zapisuje je w bazie danych. Spust jest poniżej.wyzwalacz Mysql zapisany w pamięci jest już używany przez instrukcję, która wywołała zapisany wyzwalacz

Z jakiegoś powodu wciąż otrzymuję błąd mówiąc:

#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. 

Czy to ustawić właściwą drogę?

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 ; 

Odpowiedz

41

Wyzwalacze MySQL nie mogą manipulować tabelą, do której są przypisane. Wszystkie inne duże DBMS obsługują tę funkcję, więc mam nadzieję, że MySQL wkrótce doda tę obsługę.

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

+0

Dziękuję :) - Pomogłeś mi – Skeen

+1

A ja, to bardzo denerwujący błąd – jdborg

+8

codziennie nienawidzę mysql więcej –

0

Ponadto, trzeba upewnić się, że nie ma innych procedur lub funkcji, które wykonują aktualizacje na stole, że ta szczególna procedura jest przypisane lub skończyć się w rekursji. Na przykład:

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; 

Zostanie zakończony rekurencją, więc należy uważać na istniejące procedury i funkcje.

Powiązane problemy