Files
BD_2FA/CM_I_25/CG_CM_I_25.txt
2026-01-15 13:31:16 +01:00

126 lines
2.6 KiB
Plaintext

Exercice 1 : 4 points
1. Liste des emprunts en cours (date_retour = NULL)
SELECT
Livres.titre AS Titre_Livre,
Auteurs.nom AS Nom_Auteur,
Auteurs.prenom AS Prenom_Auteur,
Emprunts.membre_id AS Membre_ID
FROM
Emprunts
JOIN
Livres ON Emprunts.livre_id = Livres.livre_id
JOIN
Auteurs ON Livres.auteur_id = Auteurs.auteur_id
WHERE
Emprunts.date_retour IS NULL;
2. Liste des livres empruntés pour une durée > 25 jours
SELECT
Livres.titre AS Titre_Livre,
Emprunts.date_emprunt,
Emprunts.date_retour,
DATEDIFF(Emprunts.date_retour, Emprunts.date_emprunt) AS Duree_Emprunt
FROM
Emprunts
JOIN
Livres ON Emprunts.livre_id = Livres.livre_id
WHERE
DATEDIFF(Emprunts.date_retour, Emprunts.date_emprunt) > 25;
Exercice 2 : 2 points
Création de la séquence Livres_seq
CREATE SEQUENCE Livres_seq
START WITH 12
INCREMENT BY 1;
Exercice 3 : 5 points
Procédure AjouterLivre
CREATE OR REPLACE PROCEDURE AjouterLivre(
p_titre VARCHAR2,
p_auteur_id INT,
p_annee_publication INT,
p_genre VARCHAR2,
p_stock INT
) AS
BEGIN
-- Vérification de l'existence de l'auteur
IF NOT EXISTS (
SELECT 1
FROM Auteurs
WHERE auteur_id = p_auteur_id
) THEN
RAISE_APPLICATION_ERROR(-20001, 'Auteur inexistant.');
END IF;
-- Insertion du nouveau livre
INSERT INTO Livres (livre_id, titre, auteur_id, annee_publication, genre, stock)
VALUES (Livres_seq.NEXTVAL, p_titre, p_auteur_id, p_annee_publication, p_genre, p_stock);
END;
/
Exercice 4 : 3 points
Fonction fn_nombre_livres_empruntes
CREATE OR REPLACE FUNCTION fn_nombre_livres_empruntes(p_membre_id INT)
RETURN INT AS
nombre_emprunts INT;
BEGIN
SELECT COUNT(*)
INTO nombre_emprunts
FROM Emprunts
WHERE membre_id = p_membre_id;
RETURN nombre_emprunts;
END;
/
Exercice 5 : 5 points
Trigger trg_decrementer_stock_emprunt
CREATE OR REPLACE TRIGGER trg_decrementer_stock_emprunt
BEFORE INSERT ON Emprunts
FOR EACH ROW
DECLARE
stock_actuel INT;
BEGIN
-- Vérification du stock
SELECT stock INTO stock_actuel
FROM Livres
WHERE livre_id = :NEW.livre_id;
IF stock_actuel > 0 THEN
-- Décrémenter le stock
UPDATE Livres
SET stock = stock - 1
WHERE livre_id = :NEW.livre_id;
ELSE
-- Empêcher l'emprunt
RAISE_APPLICATION_ERROR(-20002, 'Stock insuffisant pour emprunter ce livre.');
END IF;
END;
/