1. Procédure sp_Mise_A_Jour_Prix_Produit Cette procédure met à jour le prix unitaire d’un produit donné. CREATE OR REPLACE PROCEDURE sp_Mise_A_Jour_Prix_Produit( Nom_Produit VARCHAR2, Nouveau_Prix_Unitaire NUMBER ) AS BEGIN -- Vérification si le produit existe IF NOT EXISTS (SELECT 1 FROM Produit WHERE nom_produit = Nom_Produit) THEN RAISE_APPLICATION_ERROR(-20001, 'Produit inexistant.'); END IF; -- Mise à jour du prix unitaire UPDATE Produit SET prix_unitaire = Nouveau_Prix_Unitaire WHERE nom_produit = Nom_Produit; DBMS_OUTPUT.PUT_LINE('Le prix du produit ' || Nom_Produit || ' a été mis à jour.'); END; / 2. Fonction fn_quantité_moyenne Cette fonction retourne la moyenne des quantités commandées pour un produit donné. CREATE OR REPLACE FUNCTION fn_quantite_moyenne( nom_produit VARCHAR2 ) RETURN NUMBER AS moyenne_quantite NUMBER; BEGIN -- Vérification si le produit existe IF NOT EXISTS (SELECT 1 FROM Produit WHERE nom_produit = nom_produit) THEN RAISE_APPLICATION_ERROR(-20002, 'Produit inexistant.'); END IF; -- Calcul de la moyenne des quantités commandées SELECT AVG(quantite) INTO moyenne_quantite FROM ligne_commande WHERE produit_id = (SELECT id FROM Produit WHERE nom_produit = nom_produit); RETURN moyenne_quantite; END; / 3. Procédure sp_DateDernierAchat Cette procédure affiche la dernière date d'achat d’un produit donné. CREATE OR REPLACE PROCEDURE sp_DateDernierAchat( Nom_Produit VARCHAR2 ) AS derniere_date DATE; BEGIN -- Vérification si le produit existe IF NOT EXISTS (SELECT 1 FROM Produit WHERE nom_produit = Nom_Produit) THEN RAISE_APPLICATION_ERROR(-20003, 'Produit inexistant.'); END IF; -- Récupération de la dernière date d'achat SELECT MAX(date_achat) INTO derniere_date FROM Commande c JOIN ligne_commande lc ON c.id = lc.commande_id WHERE lc.produit_id = (SELECT id FROM Produit WHERE nom_produit = Nom_Produit); DBMS_OUTPUT.PUT_LINE('Le produit ' || Nom_Produit || ' a pour dernière date d''achat : ' || derniere_date); END; / 4. Ajouter la colonne quantite_en_stock dans la table Produit Requête pour ajouter la colonne et l'initialiser avec une valeur par défaut : ALTER TABLE Produit ADD quantite_en_stock NUMBER DEFAULT 0; -- Initialisation des valeurs de stock (exemple : 100 pour tous les produits) UPDATE Produit SET quantite_en_stock = 100 WHERE quantite_en_stock = 0; 5. Trigger trg_GestionStock Ce trigger vérifie que la quantité commandée est inférieure ou égale au stock disponible avant d’ajouter une ligne de commande. CREATE OR REPLACE TRIGGER trg_GestionStock BEFORE INSERT ON ligne_commande FOR EACH ROW DECLARE v_stock_disponible NUMBER; BEGIN -- Vérifier le stock disponible pour le produit SELECT quantite_en_stock INTO v_stock_disponible FROM Produit WHERE id = :NEW.produit_id; IF :NEW.quantite > v_stock_disponible THEN RAISE_APPLICATION_ERROR(-20004, 'Quantité commandée supérieure au stock disponible.'); END IF; -- Mise à jour du stock UPDATE Produit SET quantite_en_stock = quantite_en_stock - :NEW.quantite WHERE id = :NEW.produit_id; END; / Résumé des solutions : 1. Procédure sp_Mise_A_Jour_Prix_Produit : Met à jour le prix unitaire d’un produit. 2. Fonction fn_quantité_moyenne : Retourne la moyenne des quantités commandées d’un produit. 3. Procédure sp_DateDernierAchat : Affiche la dernière date d’achat d’un produit. 4. Ajout de la colonne quantite_en_stock : Permet de gérer les stocks des produits. 5. Trigger trg_GestionStock : Vérifie et met à jour le stock avant insertion dans ligne_commande.