Aller au contenu

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.

DELIMITER $$

...

DELIMITER ;

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 :

DECLARE nom_variable type_de_donnee [DEFAULT valeur_default]

La section DEFAULT est optionnel et sert à assigner une valeur par défaut à la variable.

DECLARE prenom VARCHAR(50) DEFAULT 'Mathieu';

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.

SET prenom = "Alexandre";

SELECT u.prenom 
INTO prenom
FROM usager u
WHERE u.id = 1234;

Suppression d'une procedure

Syntaxe
DROP PROCEDURE [IF EXISTS] nom_procedure;

Ressources