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 ;
DELIMITER
permet 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_auteur
qui prend un paramètreid_auteur
- Utiliser une requête
SELECT
pour 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;