web-dev-qa-db-fra.com

Comment définir des variables dans la mise à jour MySQL

J'ai une table estimation et une table estimation_line_items. J'essaie de mettre à jour la table des estimations chaque fois que les éléments de la ligne enfant changent. Je continue à courir dans une erreur de syntaxe. L'erreur n'est pas très descriptive ("Vous avez une erreur dans votre syntaxe SQL; Vérifiez le manuel correspondant à votre version du serveur Mariadb"). Il semble que je fasse la fouille pour définir les valeurs variables.

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;

Edit: J'ai également essayé de définir les variables comme celle-ci, avec les mêmes résultats: SET vPrev_amnt := (SELECT OLD.price * OLD.quantity);

1
Bad Programmer

Que diriez-vous ...

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