web-dev-qa-db-ja.com

MySQL更新トリガーで変数を設定する方法

私は見積もりテーブルと、estimates_line_itemsテーブルを持っています。子の広告申込情報が変更されるたびに、見積もり表を更新しようとしています。構文エラーが発生し続けます。エラーはあまり説明的ではありません(「SQL構文にエラーがあります。MariaDBサーバーのバージョンに対応するマニュアルを確認してください」)。変数の値を設定するのに失敗しているようです。

_CREATE TRIGGER Update_estimate_from_line_items
AFTER UPDATE
   ON estimate_line_items FOR EACH ROW

BEGIN

   -- variable declarations
   DECLARE vPrev_amnt INT;
   DECLARE vNew_amnt INT;
   DECLARE nDiff INT;

   SET vPrev_amnt = OLD.price * OLD.quantity;
   SET vNew_amnt = NEW.price * NEW.quantity;
   SET nDiff = new_amnt - prev_amnt;

   -- trigger code
   UPDATE estimates SET 
    subtotal = total + nDiff,
    total = subtotal + (tax_rate/100 * subtotal)
   WHERE estimate_id = NEW.estimate_id;

END;
_

編集:私もこのような変数を設定しようとしましたが、同じ結果が得られました:SET vPrev_amnt := (SELECT OLD.price * OLD.quantity);

1
Bad Programmer

どう...

drop trigger if exists Update_estimate_from_line_items;
delimiter //

CREATE TRIGGER Update_estimate_from_line_items
AFTER UPDATE
   ON estimate_line_items FOR EACH ROW

BEGIN

   -- variable declarations
   DECLARE vPrev_amnt INT;
   DECLARE vNew_amnt INT;
   DECLARE nDiff INT;


   SET vPrev_amnt = OLD.price * OLD.quantity;
   SET vNew_amnt = NEW.price * NEW.quantity;
   SET nDiff = vNew_amnt - vPrev_amnt;  -- names amended

   -- trigger code
   UPDATE estimates SET 
     subtotal = total + nDiff
   , total = subtotal + (tax_rate/100 * subtotal)
   WHERE estimate_id = NEW.estimate_id;  

END//

delimiter ;
1
stefan