0

我试图在更新后在一个表上创建一个触发器,它将更新另一个表。

这是我尝试过的代码:

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 行

4

1 回答 1

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
于 2013-06-04T22:03:21.787 回答