---FINAL
CREATE OR REPLACE TRIGGER TR_BEFORE_COMMANDE_PRODUITS_MONTANT_TOTAL
BEFORE DELETE OR UPDATE OF COMMANDE_ID,QUANTITE,PRODUIT_ID OR INSERT ON
COMMANDE_PRODUITS
FOR EACH ROW
DECLARE
V_PRIX [Link]%TYPE;
V_PRIX_OLD [Link]%TYPE;
BEGIN
--FOR INSERT
IF INSERTING THEN
SELECT PRIX INTO V_PRIX FROM PRODUITS WHERE ID =:NEW.PRODUIT_ID;
UPDATE COMMANDES SET MONTANT = MONTANT + (V_PRIX * :[Link]) WHERE
ID=:NEW.COMMANDE_ID;
--FOR DELETE
ELSIF DELETING THEN
SELECT PRIX INTO V_PRIX FROM PRODUITS WHERE ID =:OLD.PRODUIT_ID;
UPDATE COMMANDES SET MONTANT = MONTANT - (V_PRIX * :[Link]) WHERE
ID=:OLD.COMMANDE_ID;
--FOR UPDATE
ELSIF UPDATING THEN
SELECT PRIX INTO V_PRIX_OLD FROM PRODUITS WHERE ID =:OLD.PRODUIT_ID;
SELECT PRIX INTO V_PRIX FROM PRODUITS WHERE ID =:NEW.PRODUIT_ID;
IF :NEW.COMMANDE_ID != :OLD.COMMANDE_ID THEN
UPDATE COMMANDES
SET MONTANT = MONTANT - (:[Link] * V_PRIX_OLD) WHERE ID
= :OLD.COMMANDE_ID;
UPDATE COMMANDES
SET MONTANT = MONTANT + (:[Link] * V_PRIX) WHERE ID
= :NEW.COMMANDE_ID;
ELSE
UPDATE COMMANDES
SET MONTANT = MONTANT - (:[Link] * V_PRIX_OLD) + (:[Link] *
V_PRIX) WHERE ID = :NEW.COMMANDE_ID;
END IF;
END IF;
END;
---ENDFINAL
------🗸TESTÉ ET APPROUVÉ PAR ORACLE LUI-MÊME
----On ne peut pas modifier la commande_id ou le produit_id car les deux
représentent la clé primaire de la table commande_produits
---BLOOPER
CREATE OR REPLACE TRIGGER TR_BEFORE_COMMANDE_PRODUITS_MONTANT_TOTAL
BEFORE DELETE OR UPDATE OF COMMANDE_ID,QUANTITE,PRODUIT_ID OR INSERT ON
COMMANDE_PRODUITS
FOR EACH ROW
DECLARE
V_PRIX [Link]%TYPE;
V_PRIX_OLD [Link]%TYPE;
BEGIN
--FOR INSERT
IF INSERTING THEN
SELECT PRIX INTO V_PRIX FROM PRODUITS WHERE ID =:NEW.PRODUIT_ID;
UPDATE COMMANDES SET MONTANT = MONTANT + (V_PRIX * :[Link]) WHERE
ID=:NEW.COMMANDE_ID;
--FOR DELETE
ELSIF DELETING THEN
SELECT PRIX INTO V_PRIX FROM PRODUITS WHERE ID =:OLD.PRODUIT_ID;
UPDATE COMMANDES SET MONTANT = MONTANT - (V_PRIX * :[Link]) WHERE
ID=:OLD.COMMANDE_ID;
--FOR UPDATE
ELSIF UPDATING THEN
SELECT PRIX INTO V_PRIX_OLD FROM PRODUITS WHERE ID =:OLD.PRODUIT_ID;
SELECT PRIX INTO V_PRIX FROM PRODUITS WHERE ID =:NEW.PRODUIT_ID;
IF V_PRIX_OLD != V_PRIX AND :[Link] != :[Link] THEN
UPDATE COMMANDES
SET MONTANT = MONTANT - (:[Link] * V_PRIX_OLD) + (:[Link] *
V_PRIX) WHERE ID = :NEW.COMMANDE_ID;
ELSIF V_PRIX_OLD != V_PRIX AND :[Link] = :[Link] THEN
UPDATE COMMANDES
SET MONTANT = MONTANT - (:[Link] * V_PRIX_OLD) + (:[Link] *
V_PRIX) WHERE ID = :NEW.COMMANDE_ID;
ELSIF V_PRIX_OLD = V_PRIX AND :[Link] != :[Link] THEN
UPDATE COMMANDES
SET MONTANT = MONTANT - (:[Link] * V_PRIX_OLD) + (:[Link] *
V_PRIX) WHERE ID = :NEW.COMMANDE_ID;
ELSIF V_PRIX_OLD = V_PRIX AND :[Link] = :[Link] THEN
UPDATE COMMANDES
SET MONTANT = MONTANT - (:[Link] * V_PRIX_OLD) + (:[Link] *
V_PRIX) WHERE ID = :NEW.COMMANDE_ID;
ELSIF :OLD.COMMANDE_ID != :NEW.COMMANDE_ID THEN
UPDATE COMMANDES
SET MONTANT = MONTANT - (:[Link] * V_PRIX_OLD)
WHERE ID= :OLD.COMMANDE_ID;
UPDATE COMMANDES
SET MONTANT = MONTANT + (:[Link] * V_PRIX)
WHERE ID = :NEW.COMMANDE_ID;
END IF;
END IF;
END;
---ENDBLOOPER