BUT2FA BD

This commit is contained in:
2026-01-15 13:31:16 +01:00
commit 22f16cb959
17 changed files with 1283 additions and 0 deletions

130
TP3/CG_TP3.txt Normal file
View File

@@ -0,0 +1,130 @@
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.

BIN
TP3/TP3.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 KiB