Files
BD_2FA/TP3/CG_TP3.txt
2026-01-15 13:31:16 +01:00

130 lines
3.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
1. Procédure sp_Mise_A_Jour_Prix_Produit
Cette procédure met à jour le prix unitaire dun 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 dun 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 dajouter 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 dun produit.
2. Fonction fn_quantité_moyenne : Retourne la moyenne des quantités commandées dun produit.
3. Procédure sp_DateDernierAchat : Affiche la dernière date dachat dun 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.