2017-08-19 1 views
0
DELIMITER $$ 

USE `gym`$$ 

DROP TRIGGER /*!50032 IF EXISTS */ `goods_input_total_amount-updateon-goods_input_price`$$ 

CREATE 
    /*!50017 DEFINER = 'root'@'localhost' */ 
    TRIGGER `goods_input_total_amount-updateon-goods_input_price` 
    AFTER UPDATE ON `goods_input_price` 
    FOR EACH ROW BEGIN 
     DECLARE input_price INTEGER; 
     SELECT price_goods_input_price INTO input_price FROM goods_input_price 
     WHERE id_goods_input_price=NEW.id_goods_input_price LIMIT 1; 
     SET new.goods_input_total_amount=goods_input_quantity*input_price; 
    END; 
$$ 

DELIMITER ; 

Je possède ce message d'erreur:Comment puis-je mettre à jour la table1 après la mise à jour sur la table2?

Code d'erreur: 1362 Mise à jour de la ligne NOUVEAU n'est pas autorisé après déclenchement

+0

Modifier votre question – Noob

Répondre

2

Le message est assez clair. Si vous souhaitez mettre à jour la ligne, vous avez besoin d'un avant déclencheur de mise à jour:

DELIMITER $$ 

USE gym$$ 

DROP TRIGGER `goods_input_total_amount_updateon_goods_input_price`$$ 

CREATE TRIGGER `goods_input_total_amount_updateon_goods_input_price` 
BEFORE UPDATE ON goods_input_price 
FOR EACH ROW 
BEGIN 
    DECLARE input_price INTEGER; 
    SELECT price_goods_input_price INTO input_price 
    FROM goods_input_price 
    WHERE id_goods_input_price = NEW.id_goods_input_price 
    LIMIT 1; 

    SET new.goods_input_total_amount = goods_input_quantityinput_price; 
END; $$ 

DELIMITER ; 

Je serais enclin à écrire ce que:

BEGIN 
    SELECT price_goods_input_price 
    INTO new.goods_input_total_amount 
    FROM goods_input_price 
    WHERE id_goods_input_price = NEW.id_goods_input_price 
    LIMIT 1; 
END; $$ 
+0

Code d'erreur: 1054 Unknown column 'goods_input_total_amount' dans 'NEW' ceci est dans le cas "avant" – Karen

+0

et la dernière rangée est la suivante SET new.goods_input_total_amount = goods_input_quantity * input_price; – Karen

+0

@Karen. . . Le nom du déclencheur ne doit pas avoir de traits d'union. –