Procédure stockée avec des paramètres – MySQL
L’utilité des procédures stockées réside dans leur capacité à transmettre des paramètres et à permettre à la procédure stockée de gérer les différentes requêtes effectuées. Dans ce tutoriel nous allons découvrir comment passer des valeurs de paramètres à une procédure stockée.
Dans MySQL, un paramètre a l’un des trois modes suivants: IN, OUT ou INOUT.
Paramètres IN
IN est le mode par défaut. Lorsque vous définissez un paramètre IN dans une procédure stockée, le programme appelant doit passer un argument à la procédure stockée. En plus, la valeur d’un paramètre IN est protégée. Cela signifie que même si la valeur du paramètre IN est modifiée dans la procédure stockée, sa valeur d’origine est maintenu à la fin de la procédure stockée. En d’autres termes, la procédure stockée ne fonctionne que sur la copie du paramètre IN.
Paramètres OUT
La valeur d’un paramètre OUT peut être modifiée dans la procédure stockée et sa nouvelle valeur est renvoyée au programme appelant. Notez que la procédure stockée ne peut pas accéder à la valeur initiale du paramètre OUT au démarrage.
Paramètres INOUT
Un paramètre INOUT est une combinaison de paramètres IN et OUT. Cela signifie que le programme appelant peut passer l’argument et que la procédure stockée peut modifier le paramètre INOUT et renvoyer la nouvelle valeur au programme appelant.
Exemple de paramètre IN
L’exemple suivant crée une procédure stockée qui recherche tous les clients situés dans un pays spécifié par le paramètre d’entrée « p »:
DELIMITER $ CREATE PROCEDURE getClientByPays( IN p VARCHAR(20) ) BEGIN SELECT * FROM Clients WHERE pays = p; END$ Delimiter ;
Dans cet exemple, « p » est le paramètre IN de la procédure stockée.
Supposons que vous souhaitiez trouver des client situés en France et que vous deviez passer un argument à la procédure stockée, comme indiqué dans la requête suivante:
CALL getClientByPays('France');
Exemple de paramètre OUT
La procédure suivante renvoie le nombre de commandes par statut.
DELIMITER $ CREATE PROCEDURE getCommande ( IN s VARCHAR(20), OUT total INT ) BEGIN SELECT SUM(TTC) INTO total FROM Commandes WHERE statut = s; END$ Delimiter ;
Vous pouvez invoquer la procédure stockée pour recevoir la valeur de la variable « total », comme indiqué dans la requête suivante:
CALL getCommande('envoyer',@total); SELECT @total;
La sortie :
225