Procédure stockée
Une procédure stockée nous permet d'enregistrer sur le serveur MySQL une série d'instructions qu'on pourra réutiliser à notre guise. À la différence de la fonction, la procédure stockée peut retourner un jeu de résultat.
Création d'une procédure
La première chose à faire quand on crée une procédure est de changer le Delimiter pour ne pas que l'intruction de création se termine au premier point-virgule (;) rencontré. La commande est DELIMITER
suivi du symbole à utiliser pour indiquer une fin d'instruction. Dans l'exemple suivant le symbole est $$. À la fin des instructions ont doit remettre le delimiter au point-virgule.
Ensuite pour créer la procédure la commande à utiliser est CREATE PROCEDURE
.
CREATE PROCEDURE [IF NOT EXISTS] nom_procedure (
paramètre1,
paramètre2,…
)
BEGIN
-- Le traitement
END
paramètres
- Les paramètres sont définis par un nom, un type de données et un indicateur IN, OUT ou INOUT.
- IN indique que le paramêtre est en entrée, OUT en sortie et INOUT pour les deux. La valeur d'un paramêtre IN est "passée" dans la fonction et utilisée dans celle-ci. Pour un paramêtre OUT on peut récupérer sa valeur à la sortie de la fonction. Ce n'est pas la même valeur que le retour de la fonction, on peut donc s'en servir pour retourner plus d'une valeur à la fonction. INOUT permet les deux. Par défaut et si on ne l'indique pas le paramêtre sera IN.
- Chaque paramêtre est séparé par une virgule.
Le traitement
- La procédure n'est pas tenu de retourner une valeur. On pourrait par exemple faire une procédure qui supprimerait les enregistrements d'une table selon certain critères.
- Par contre il est préférable de toujours retourner une valeur, comme un indicateur de succès pour l'exemple précédent.
- On peut utiliser des HANDLERs dans une procédure pour controller le traitement.
Utilisation de variables
On peut déclarer des variables de la façon suivante :
La section DEFAULT est optionnel et sert à assigner une valeur par défaut à la variable.
On peut ensuite assigner une valeur à la variable avec SET
ou un SELECT ... INTO ma_variable FROM ...
. Si on utilise le Select le résultat doit être une valeur unique.