TP : ORACLE PL/SQL
ESA GENIE LOGICIEL 2025
PREMIERE PARTIE 10 POINTS
A livrer par mail sur mantorah@[Link] avant le 08 /06/2025 qui est le jour
de présentation en ligne du projet
Développement d’un mini système de gestion des commandes clients en PL/SQL
Objectifs pédagogiques :
Maîtriser les bases de la programmation PL/SQL (blocs, variables, structures de
contrôle).
Manipuler des procédures, fonctions, triggers, curseurs et packages.
Appliquer des concepts de gestion d’erreurs et de modularité.
Simuler un mini-SI d’entreprise orienté commandes.
Modèle relationnel simplifié :
sql
CopierModifier
CREATE TABLE CLIENT (
id_client NUMBER PRIMARY KEY,
nom_client VARCHAR2(100),
ville VARCHAR2(50)
);
CREATE TABLE PRODUIT (
id_produit NUMBER PRIMARY KEY,
libelle VARCHAR2(100),
prix NUMBER(8,2)
);
CREATE TABLE COMMANDE (
id_commande NUMBER PRIMARY KEY,
id_client NUMBER,
date_commande DATE,
statut VARCHAR2(20),
FOREIGN KEY (id_client) REFERENCES CLIENT(id_client)
);
CREATE TABLE LIGNE_COMMANDE (
id_commande NUMBER,
id_produit NUMBER,
quantite NUMBER,
PRIMARY KEY (id_commande, id_produit),
FOREIGN KEY (id_commande) REFERENCES COMMANDE(id_commande),
Page 1 sur 5
Prof TCHEDRE K. Cel 90 94 59 66
FOREIGN KEY (id_produit) REFERENCES PRODUIT(id_produit)
);
Travail demandé (à rendre sous forme de scripts et
rapport) :
✅ Partie 1 – Blocs PL/SQL de base
Écrire un bloc PL/SQL qui :
o Affiche les clients ayant commandé un produit donné.
o Affiche le montant total d’une commande passée en paramètre (id_commande).
✅ Partie 2 – Procédures
Créer une procédure AJOUTER_COMMANDE(id_client, id_produit, quantite) qui
:
o Crée une commande si nécessaire.
o Insère la ligne de commande.
o Met à jour automatiquement le statut à "EN COURS".
o Gère les erreurs (client ou produit inexistant).
✅ Partie 3 – Fonctions
Créer une fonction TOTAL_CLIENT(id_client) qui retourne le total des achats de ce
client.
Créer une fonction PRODUIT_PLUS_COMMANDE() qui retourne l’ID du produit le plus
commandé.
✅ Partie 4 – Curseurs
Écrire un curseur qui :
o Parcourt toutes les commandes.
o Affiche pour chacune : client, date, total.
o Utilise un curseur paramétré pour afficher les lignes de chaque commande.
✅ Partie 5 – Triggers
Créer un trigger qui empêche d’insérer une commande sans lignes associées (via
logique métier).
Créer un trigger qui loggue toute suppression de commande dans une table
HISTO_COMMANDES.
✅ Partie 6 – Package
Créer un package PKG_COMMANDE contenant :
Page 2 sur 5
Prof TCHEDRE K. Cel 90 94 59 66
o Une fonction NB_COMMANDES_CLIENT(id_client) qui retourne le nombre de
commandes du client.
o Une procédure SUPPRIMER_COMMANDE(id_commande) qui supprime
proprement une commande et ses lignes.
Partie 7 – générer un script de sauvegarde ou d’export (dump)de la base de
donnees
générer un script de restauration ou d’import (dump)de la base de données
📂 Livrables attendus :
1. Fichiers SQL :
o Script de création des tables + insertions de données (jeu d’essai).
o Scripts PL/SQL (procédures, fonctions, triggers, packages).
o Script IMPORT ET EXPORT de la base de donnee
2. Rapport PDF (3–5 pages) :
o Présentation du modèle de données.
o Détails des fonctions/procédures/triggers réalisés.
o Captures ou descriptions des résultats.
o Problèmes rencontrés et solutions.
o Proposition d’amélioration.
DEUXIEME PARTIE 10 POINTS
📌 TPM Oracle PL/SQL : Gestion d'une Bibliothèque
Universitaire
🎯 Objectifs pédagogiques :
Manipuler des blocs PL/SQL (déclaration, exécution, exceptions).
Créer des procédures, fonctions, triggers, curseurs et packages.
Mettre en œuvre un système simple de gestion des prêts de livres.
Renforcer la rigueur dans la gestion des règles métiers via PL/SQL.
📚 Contexte fonctionnel :
L’université souhaite gérer les livres, les étudiants emprunteurs, et les emprunts à l’aide
d’un système développé en PL/SQL.
Page 3 sur 5
Prof TCHEDRE K. Cel 90 94 59 66
Modèle relationnel simplifié :
sql
CopierModifier
CREATE TABLE ETUDIANT (
id_etud NUMBER PRIMARY KEY,
nom_etud VARCHAR2(100),
niveau VARCHAR2(10)
);
CREATE TABLE LIVRE (
id_livre NUMBER PRIMARY KEY,
titre VARCHAR2(150),
auteur VARCHAR2(100),
disponible CHAR(1) -- 'O' ou 'N'
);
CREATE TABLE EMPRUNT (
id_emprunt NUMBER PRIMARY KEY,
id_etud NUMBER,
id_livre NUMBER,
date_emprunt DATE,
date_retour DATE,
FOREIGN KEY (id_etud) REFERENCES ETUDIANT(id_etud),
FOREIGN KEY (id_livre) REFERENCES LIVRE(id_livre)
);
Travail demandé :
🔹 1. Blocs PL/SQL
Écrire un bloc PL/SQL qui affiche tous les livres disponibles.
Écrire un bloc qui compte et affiche le nombre d'emprunts en cours pour un étudiant
donné.
🔹 2. Procédures
Créer une procédure EMPRUNTER_LIVRE(p_id_etud, p_id_livre) qui :
o Vérifie si le livre est disponible.
o Insère un emprunt avec la date du jour et null pour la date de retour.
o Marque le livre comme indisponible.
🔹 3. Fonctions
Créer une fonction NB_EMPRUNTS_ETUDIANT(p_id_etud) qui retourne le nombre
d’emprunts de l’étudiant.
Créer une fonction ETUDIANT_PLUS_EMPRUNTE() qui retourne le nom de l’étudiant
ayant fait le plus d’emprunts.
🔹 4. Triggers
Page 4 sur 5
Prof TCHEDRE K. Cel 90 94 59 66
Créer un trigger limite_emprunts qui empêche un étudiant de faire plus de 3
emprunts simultanés.
Créer un trigger qui met à jour le statut du livre à 'O' lors de la mise à jour de
date_retour.
🔹 5. Curseurs
Écrire un curseur pour afficher tous les emprunts d’un étudiant donné avec les détails
(titre, auteur, date_emprunt).
Ajouter un curseur paramétré pour afficher les livres empruntés entre deux dates.
🔹 6. Package
Créer un package PKG_BIBLIO avec :
o Une procédure RETOUR_LIVRE(p_id_emprunt) qui met à jour la date de
retour.
o Une fonction LIVRES_NON_RETOURNES() qui retourne le nombre de livres
encore en cours d’emprunt.
Partie 7 –SAUVEGARDE ET RESTAURATION
générer un script de sauvegarde ou d’export (dump)de la base de donnees
générer un script de restauration ou d’import (dump)de la base de données
📂 Livrables attendus :
1. Script SQL complet :
o Création des tables
o Insertion des données d’exemple (4-5 étudiants, 5-6 livres)
o Code PL/SQL complet (blocs, procédures, fonctions, triggers, curseurs,
package)
o Script IMPORT ET EXPORT de la base de donnee
2. Un rapport PDF contenant :
o Résumé des objectifs
o Description de la base (modèle, jeu de données)
o Explication des traitements PL/SQL
o Résultats de tests (avec captures ou exemples)
o Problèmes rencontrés et résolutions
Page 5 sur 5
Prof TCHEDRE K. Cel 90 94 59 66