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