0% ont trouvé ce document utile (0 vote)
37 vues3 pages

Trigger Total

Le document présente un trigger PL/SQL qui met à jour le montant total des commandes dans une table 'COMMANDES' lors des opérations d'insertion, de suppression ou de mise à jour sur la table 'COMMANDE_PRODUITS'. Il gère les changements de prix et de quantité des produits associés à chaque commande. Le trigger est conçu pour assurer l'intégrité des données en ajustant le montant total en fonction des modifications apportées.

Transféré par

hindemelais
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
37 vues3 pages

Trigger Total

Le document présente un trigger PL/SQL qui met à jour le montant total des commandes dans une table 'COMMANDES' lors des opérations d'insertion, de suppression ou de mise à jour sur la table 'COMMANDE_PRODUITS'. Il gère les changements de prix et de quantité des produits associés à chaque commande. Le trigger est conçu pour assurer l'intégrité des données en ajustant le montant total en fonction des modifications apportées.

Transféré par

hindemelais
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd

---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 PRODUITS.PRIX%TYPE;
V_PRIX_OLD PRODUITS.PRIX%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 * :NEW.QUANTITE) 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 * :OLD.QUANTITE) 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 - (:OLD.QUANTITE * V_PRIX_OLD) WHERE ID
= :OLD.COMMANDE_ID;

UPDATE COMMANDES
SET MONTANT = MONTANT + (:NEW.QUANTITE * V_PRIX) WHERE ID
= :NEW.COMMANDE_ID;

ELSE
UPDATE COMMANDES
SET MONTANT = MONTANT - (:OLD.QUANTITE * V_PRIX_OLD) + (:NEW.QUANTITE *
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 PRODUITS.PRIX%TYPE;
V_PRIX_OLD PRODUITS.PRIX%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 * :NEW.QUANTITE) 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 * :OLD.QUANTITE) 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 :OLD.QUANTITE != :NEW.QUANTITE THEN


UPDATE COMMANDES
SET MONTANT = MONTANT - (:OLD.QUANTITE * V_PRIX_OLD) + (:NEW.QUANTITE *
V_PRIX) WHERE ID = :NEW.COMMANDE_ID;

ELSIF V_PRIX_OLD != V_PRIX AND :OLD.QUANTITE = :NEW.QUANTITE THEN


UPDATE COMMANDES
SET MONTANT = MONTANT - (:OLD.QUANTITE * V_PRIX_OLD) + (:NEW.QUANTITE *
V_PRIX) WHERE ID = :NEW.COMMANDE_ID;

ELSIF V_PRIX_OLD = V_PRIX AND :OLD.QUANTITE != :NEW.QUANTITE THEN


UPDATE COMMANDES
SET MONTANT = MONTANT - (:OLD.QUANTITE * V_PRIX_OLD) + (:NEW.QUANTITE *
V_PRIX) WHERE ID = :NEW.COMMANDE_ID;

ELSIF V_PRIX_OLD = V_PRIX AND :OLD.QUANTITE = :NEW.QUANTITE THEN


UPDATE COMMANDES
SET MONTANT = MONTANT - (:OLD.QUANTITE * V_PRIX_OLD) + (:NEW.QUANTITE *
V_PRIX) WHERE ID = :NEW.COMMANDE_ID;

ELSIF :OLD.COMMANDE_ID != :NEW.COMMANDE_ID THEN


UPDATE COMMANDES
SET MONTANT = MONTANT - (:OLD.QUANTITE * V_PRIX_OLD)
WHERE ID= :OLD.COMMANDE_ID;

UPDATE COMMANDES
SET MONTANT = MONTANT + (:NEW.QUANTITE * V_PRIX)
WHERE ID = :NEW.COMMANDE_ID;

END IF;
END IF;
END;

---ENDBLOOPER

Vous aimerez peut-être aussi