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é.