Le concept de procédures stockées en MySQL permet d'encapsuler une logique SQL complexe et réutilisbale. La gestion des paramètres est essentielle pour interagir avec ces procédures. MySQL supporte trois types de paramètres : IN, OUT, et INOUT.
Paramètre d'Entrée (IN)
Ce type de paramètre est utilisé pour passer des valeurs à la procédure stockée. La valeur de ce paramètre ne peut pas être modifiée par la procédure. Si le type n'est pas explicitement spécifié, il est par défaut IN.
Exemple : Obtenir le nom d'utilisateur à partir de son ID
DELIMITER $$
CREATE PROCEDURE ObtenirNomUtilisateur(IN id_utilisateur INT)
BEGIN
DECLARE nom_utilisateur VARCHAR(50) DEFAULT '';
SELECT nom INTO nom_utilisateur FROM utilisateurs WHERE id = id_utilisateur;
SELECT nom_utilisateur;
END$$
DELIMITER ;
Dans cet exemple, id_utilisateur est un paramètre IN. Sa valeur est fournie lors de l'appel de la procédure et reste inchangée à l'intérieur de celle-ci.
Paramètre de Sortie (OUT)
Les paramètres OUT sont utilisés pour renvoyer des valeurs depuis une procédure stockée vers le programme appelant. La valeur initiale de ce paramètre lorsqu'il est passé à la procédure est ignorée ; il est conçu pour être défini par la procédure.
Exemple : Renvoyer le nom d'utilisateur via un paramètre OUT
DELIMITER $$
CREATE PROCEDURE RecupererNomUtilisateur(IN id_utilisateur INT, OUT nom_utilisateur VARCHAR(50))
BEGIN
SELECT nom INTO nom_utilisateur FROM utilisateurs WHERE id = id_utilisateur;
END$$
DELIMITER ;
Pour utiliser ce paramètre OUT, il faut le déclarer comme une variable avant l'appel et passer cette variable.
SET @nomAA = '';
CALL RecupererNomUtilisateur(2, @nomAA);
SELECT @nomAA AS NomUtilisateurRetourne;
Paramètre Bidirectionnel (INOUT)
Ce type de paramètre combine les fonctionnalités de IN et OUT. Il permet de passer une valeur à la procédure, de la modifier à l'intérieur de la procédure, et de renvoyer la valeur modifiée.
Exemple : Modifier et renvoyer l'ID et le nom d'utilisateur
DELIMITER $$
CREATE PROCEDURE ModifierEtRetournerUtilisateur(INOUT id_utilisateur INT, INOUT nom_utilisateur VARCHAR(50))
BEGIN
-- Modification des valeurs passées
SET id_utilisateur = 10;
SET nom_utilisateur = 'NouvelUtilisateur';
-- Récupération potentielle de données basées sur l'ID (si nécessaire)
-- SELECT nom INTO nom_utilisateur FROM utilisateurs WHERE id = id_utilisateur;
SELECT CONCAT('ID: ', id_utilisateur, ', Nom: ', nom_utilisateur);
END$$
DELIMITER ;
Pour appeler une procédure avec des paramètres INOUT, des variables doivent être utilisées.
SET @monId = 5;
SET @monNom = 'AncienNom';
CALL ModifierEtRetournerUtilisateur(@monId, @monNom);
SELECT @monId AS IdModifie, @monNom AS NomModifie;
En résumé, les types de paramètres IN, OUT, et INOUT offrrent une flexibilité significative pour la conception et l'interaction avec les procédures stockées MySQL.