BUT2FA BD
This commit is contained in:
130
TP3/CG_TP3.txt
Normal file
130
TP3/CG_TP3.txt
Normal file
@@ -0,0 +1,130 @@
|
||||
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.
|
||||
Reference in New Issue
Block a user