0

挿入後にテーブルにトリガーを作成しようとしていますが、これにより別のテーブルが更新されます。

これは私が試したコードです:

delimiter |
CREATE TRIGGER augmenter_quantite_article AFTER INSERT
ON LigneInterventaire
FOR EACH ROW BEGIN
DECLARE @qte AS INTEGER;
DECLARE @code AS INTEGER;
SELECT @qte = qteInv FROM INSERTED;
SELECT @code = codeArt FROM INSERTED;
UPDATE Article SET qteArt = qteArt + @qte WHERE codeArt = @code;
END;

|

delimiter ;

しかし、私はこのエラーメッセージを受け取ります:

1064 - SQL 構文にエラーがあります。Near '@qte AS INTEGER; を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。DECLARE @code AS INTEGER; SELECT @qte = qteInv FROM INSERTED; 4 行目の S'

4

1 に答える 1

1

試す

CREATE TRIGGER augmenter_quantite_article 
AFTER INSERT ON LigneInterventaire
FOR EACH ROW 
  UPDATE Article 
     SET qteArt = qteArt + NEW.qteInv
   WHERE codeArt = NEW.codeArt;

これがSQLFiddle のデモです。

MySql には、トリガーの実装がいくらか制限されています。仮想テーブルはなくinserteddeletedそれ自体は SQL Server と同じです。OLD代わりに、キーワードand を使用して挿入または更新されている行の古い値と新しい値にそれぞれアクセスできますNEW

たった 1 つのステートメントに要約されたため、ブロックUPDATEを使用する必要がなくなりました。BEGIN ENDもう 1 つのプラス - どちらも変更する必要はありませんDELIMITER;)

于 2013-06-03T19:48:35.033 に答える