在MySql中创建触发器时出错

时间:2015-10-11 18:18:12

标签: mysql sql triggers

我在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;

提前致谢

1 个答案:

答案 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