我在MySql db中创建此触发器时出错:
CREATE TRIGGER AggiornaQuantitaLotto AFTER UPDATE ON Lotti
FOR EACH ROW
BEGIN
DECLARE Differenza INT DEFAULT 0;
IF OLD.Quantita <> NEW.Quantita THEN
SET Differenza = NEW.Quantita - OLD.Quantita;
UPDATE Giacenze
SET Totale = Totale + Differenza,
Disponibile = Disponibile + Differenza
WHERE CodP = NEW.CodP;
END IF;
END;
我哪里错了?错误消息说:
1064 - 您的SQL语法出错;查看与您的MySQL服务器版本相对应的手册,以获得在&#39;&#39;附近使用的正确语法。在第4行
第4行是&#39; DECLARE ...&#39;
提前致谢
答案 0 :(得分:2)
你可能只需要一个分隔符语句(没有其他任何东西显然是错误的):
DELIMITER $$
CREATE TRIGGER AggiornaQuantitaLotto AFTER UPDATE ON Lotti
FOR EACH ROW
BEGIN
DECLARE Differenza INT DEFAULT 0;
IF OLD.Quantita <> NEW.Quantita THEN
SET Differenza = NEW.Quantita - OLD.Quantita;
UPDATE Giacenze
SET Totale = Totale + Differenza,
Disponibile = Disponibile + Differenza
WHERE CodP = NEW.CodP;
END IF;
END;
$$
DELIMITER ;
注意:我很想写这样的逻辑:
BEGIN
UPDATE Giacenze g
SET Totale = Totale + (NEW.Quantita - OLD.Quantita),
Disponibile = Disponibile + (NEW.Quantita - OLD.Quantita)
WHERE g.CodP = NEW.CodP AND NEW.Quantita <> OLD.Quantita
END;
这只会消除if
。