我正在尝试在Update之后在表上创建一个触发器,它将更新另一个表。
这是我尝试过的代码:
DELIMITER //
CREATE TRIGGER `update_quantite_article` AFTER UPDATE ON `LigneInterventaire`
FOR EACH ROW
BEGIN
DECLARE qte AS INTEGER;
SET qte = NEW.qteInv - OLD.qteInv;
UPDATE Article
SET qteArt := qteArt + qte
WHERE codeArt = NEW.codeArt
END;
//
DELIMITER ;
但我收到此错误消息:
1064 - 您的SQL语法出错;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 'AS INTEGER附近; SET qte = NEW.qteInv - OLD.qteInv;更新文章 SET qteArt ='第4行
答案 0 :(得分:1)
(你有问题吗?我打算进行插补,并期待你提出一个问题,比如“如何解决这个问题?”。更简单的一点就是你提供一份关于状态的报告你当前的发展努力。)
要解决此问题,只需在DECLARE
之后移动BEGIN
语句。
另外,仅使用@qte
替换对qte
的引用。 (即我建议您使用过程变量而不是用户变量。如果您不知道差异,那么过程变量很可能就是您真正想要的。)
看起来您完全避免使用变量,如果qteInv
列定义为INTEGER类型,则不依赖于转换为字符(如用户变量的情况),或计数对变量引入的其他一些特殊处理。
未来的代码读者可以更轻松地编写代码:
CREATE TRIGGER `update_quantite_article` AFTER UPDATE ON `LigneInterventaire`
FOR EACH ROW
BEGIN
UPDATE Article
SET qteArt = qteArt + ( NEW.qteInv - OLD.qteInv )
WHERE codeArt = NEW.codeArt
END