J'ai un événement planifié nocturne qui met à jour toutes les lignes de la table 'Products' avec le dernier "Unit_price" à partir d'une table de liste de prix où "Prix_List.active" est> = le curdit (). Ce que je dois faire, c'est créer un déclencheur pour la table des produits pour définir le champ 'Last_Prix' sur l'ancienne unité_price avant la mise à jour uniquement sur les lignes où l'unité_price change. Est-ce possible.
Événement programmé:
CREATE EVENT `update_active_price` ON SCHEDULE EVERY 1 DAY
STARTS '2015-02-09 00:00:00'
ON COMPLETION PRESERVE
ENABLE COMMENT 'updates nightly at midnight'
DO
UPDATE products p
JOIN price_list pr ON p.product_id = pr.product_id
SET p.unit_price = pr.amount
WHERE active_date = CURDATE();
Actuellement de déclenchement non fonctionnel:
CREATE TRIGGER `update_last_price` BEFORE UPDATE ON `products`
FOR EACH ROW UPDATE products p
SET p.last_price = p.unit_price;
Ajustez la syntaxe de la gâchette
DROP TRIGGER IF EXISTS `update_last_price`;
CREATE TRIGGER `update_last_price`
BEFORE UPDATE ON `products`
FOR EACH ROW
SET NEW.last_price = OLD.unit_price;
ou si la gâchette doit avoir plusieurs lignes, faites-le
DROP TRIGGER IF EXISTS `update_last_price`;
DELIMITER $$
CREATE TRIGGER `update_last_price`
BEFORE UPDATE ON `products`
FOR EACH ROW
BEGIN
SET NEW.last_price = OLD.unit_price;
END $$
DELIMITER ;