Les procédures stockées
Automatiser des traitements dans la base de données avec les procédures stockées
Notions théoriques
Une procédure stockée (stored procedure) est un ensemble d’instructions SQL enregistrées dans la base de données et pouvant être exécutées sur demande.
Une procédure stockée permet :
- d’automatiser des traitements,
 - de rendre le code réutilisable
 - et de centraliser la logique métier côté serveur.
 
Avantages des procédures stockées
- Réduction de la duplication de code
 - Meilleures performances (le code est compilé une seule fois)
 - Sécurité renforcée (contrôle des accès aux données sensibles)
 - Maintenance facilitée (modification centralisée)
 - Moins de trafic entre l’application et la base de données
 
Syntaxe de base
DELIMITER //
CREATE PROCEDURE nom_de_la_procédure(paramètres)
BEGIN
  -- instructions SQL
END;
//
DELIMITER ;
DELIMITERpermet de définir un nouveau séparateur temporaire pour écrire plusieurs lignes de code.- Les paramètres peuvent être :
IN: valeur en entréeOUT: valeur de sortieINOUT: valeur en entrée et sortie
 
Appeler une procédure
Une procédure stockée s’exécute avec la commande :
CALL nom_de_la_procédure(valeurs);
Exemple de paramètres
CREATE PROCEDURE afficher_utilisateur(IN id INT)
BEGIN
  SELECT * FROM utilisateurs WHERE utilisateurs.id = id;
END;
Variables locales
Il est possible de déclarer des variables internes à la procédure :
DECLARE nom_variable TYPE;
SET nom_variable = valeur;
Structures de contrôle
Les procédures peuvent contenir des instructions de contrôle :
IF ... THEN ... ELSE ... END IF;WHILE ... DO ... END WHILE;REPEAT ... UNTIL ... END REPEAT;CASE ... WHEN ... THEN ... ELSE ... END CASE;
Suppression d’une procédure
DROP PROCEDURE IF EXISTS nom_de_la_procédure;
Limitations
- Une procédure ne peut pas être utilisée directement dans une requête 
SELECT. - Elle ne retourne pas de résultat comme une fonction, sauf via des paramètres 
OUT. 
Exemple pratique
Il est possible de créer une procédure stockée qui affiche tous les livres d’un auteur donné, en passant son identifiant en paramètre.
Étapes
- Créer une procédure 
livres_par_auteurqui prend un paramètreid_auteur - Utiliser une requête 
SELECTpour afficher les livres correspondant à cet auteur - Appeler la procédure avec différents identifiants pour vérifier le fonctionnement
 
Code SQL
DELIMITER //
CREATE PROCEDURE livres_par_auteur(IN id_auteur INT)
BEGIN
  SELECT titre, dateparu, prix
  FROM livres
  WHERE idauteur = id_auteur;
END;
//
DELIMITER ;
-- Appel de la procédure
CALL livres_par_auteur(1);
CALL livres_par_auteur(3);
Résultat attendu : une liste de livres pour chaque auteur donné.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
L’objectif de ce TP est de créer 3 procédures stockées différentes dans la base
bibliotheque.
Télécharger le fichier suivant :
👉 Télécharger le fichier 'cdi.sql' - Télécharger le MCD
Étape 1 : Importer la base de données
Importer le fichier cdi.sql dans votre environnement MariaDB (ligne de commande, phpMyAdmin, DBeaver, etc.) pour créer la base bibliotheque et ses tables.
Une solution
Vous devez être connecté pour voir le contenu.
Étape 2 : Créer une procédure livres_par_theme pour afficher les livres d’un thème donné
Créer une procédure stockée appelée livres_par_theme qui prend un paramètre d’entrée theme_livre (type VARCHAR(30)).
Elle doit afficher les titres, auteurs et dates de parution de tous les livres correspondant à ce thème.
Une solution
Vous devez être connecté pour voir le contenu.
Étape 3 : Créer une procédure statistiques_auteur pour obtenir le nombre de livres d’un auteur
Créer une procédure appelée statistiques_auteur qui prend un identifiant d’auteur (id_auteur) en paramètre d’entrée.
Elle doit afficher :
- Le nom complet de l’auteur
 - Le nombre total de livres écrits par cet auteur
 - Le prix moyen de ses livres
 
Une solution
Vous devez être connecté pour voir le contenu.
Étape 4 : Créer une procédure livres_non_rendus pour afficher les livres empruntés et non rendus
Créer une procédure appelée livres_non_rendus qui n’a pas de paramètre.
Elle doit afficher :
- Le titre du livre
 - Le nom et prénom de l’emprunteur
 - La date de prêt
 - Le nombre de jours de retard (calculé avec 
DATEDIFF(CURDATE(), datepret)) 
Une solution
Vous devez être connecté pour voir le contenu.
Étape 5 : Tester les trois procédures
Vérifier que les résultats sont corrects et lisibles.
Effectuer au moins un appel à chaque procédure avec des valeurs pertinentes :
-- Test de la procédure 1
CALL livres_par_theme('Science-fiction');
-- Test de la procédure 2
CALL statistiques_auteur(2);
-- Test de la procédure 3
CALL livres_non_rendus();
Résultats attendus :
- Liste des livres de science-fiction
 - Statistiques sur Jules Verne
 - Liste des livres non rendus avec le nombre de jours depuis l’emprunt
 
Étape 6 : Supprimer les procédures si besoin
Ajouter les commandes permettant de supprimer les procédures créées, si nécessaire :
DROP PROCEDURE IF EXISTS livres_par_theme;
DROP PROCEDURE IF EXISTS statistiques_auteur;
DROP PROCEDURE IF EXISTS livres_non_rendus;