130 lines
3.8 KiB
Plaintext
130 lines
3.8 KiB
Plaintext
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. |