2013-06-04 226 views
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; UPDATE文章 SET qteArt =」 4行

回答

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 
+0

感謝,這是有益的:) –

相關問題