DELIMITER ;
-On remet le délimiteur par défaut
Notez que, suite à la création de la procédure, j'ai remis le délimiteur par défaut ;. Ce n'est absolument pas obligatoire,
vous pouvez continuer à travailler avec | si vous préférez.
Pour l'utiliser, il faut donc passer une valeur en paramètre de la procédure. Soit directement, soit par l'intermédiaire d'une variable
utilisateur.
Code : SQL
CALL afficher_race_selon_espece(1);
SET @espece_id := 2;
CALL afficher_race_selon_espece(@espece_id);
id
nom
espece_id prix
1 Berger allemand
1
485.00
2 Berger blanc suisse 1
935.00
9 Rottweiller
1
600.00
id
nom
espece_id prix
3 Singapura
2
985.00
4 Bleu russe 2
835.00
5 Maine coon 2
735.00
7 Sphynx
2
1235.00
8 Nebelung
2
985.00
Le premier appel à la procédure affiche bien toutes les races de chiens, et le second, toutes les races de chats.
J'ai fait commencer le nom du paramètre par "p_". Ce n'est pas obligatoire, mais je vous conseille de le faire
systématiquement pour vos paramètres afin de les distinguer facilement. Si vous ne le faites pas, soyez extrêmement
prudents avec les noms que vous leur donnez. Par exemple, dans cette procédure, si on avait nommé le paramètre
espece_id , cela aurait posé problème, puisque espece_id est aussi le nom d'une colonne dans la table Race. Qui plus
est, c'est le nom de la colonne dont on se sert dans la condition WHERE. En cas d’ambiguïté, MySQL interprète
l'élément comme étant le paramètre, et non la colonne. On aurait donc eu WHERE 1 = 1 par exemple, ce qui est
toujours vrai.
Procédure avec deux paramètres, un entrant et un sortant
Voici une procédure assez similaire à la précédente, si ce n'est qu'elle n'affiche pas les races existant pour une espèce, mais
compte combien il y en a, puis stocke cette valeur dans un paramètre sortant.
Code : SQL
DELIMITER |
CREATE PROCEDURE compter_races_selon_espece (p_espece_id INT, OUT
p_nb_races INT)
BEGIN
SELECT COUNT(*) INTO p_nb_races
Partie 5 : Sécuriser et automatiser ses actions
269/414
www.openclassrooms.com
-On remet le délimiteur par défaut
Notez que, suite à la création de la procédure, j'ai remis le délimiteur par défaut ;. Ce n'est absolument pas obligatoire,
vous pouvez continuer à travailler avec | si vous préférez.
Pour l'utiliser, il faut donc passer une valeur en paramètre de la procédure. Soit directement, soit par l'intermédiaire d'une variable
utilisateur.
Code : SQL
CALL afficher_race_selon_espece(1);
SET @espece_id := 2;
CALL afficher_race_selon_espece(@espece_id);
id
nom
espece_id prix
1 Berger allemand
1
485.00
2 Berger blanc suisse 1
935.00
9 Rottweiller
1
600.00
id
nom
espece_id prix
3 Singapura
2
985.00
4 Bleu russe 2
835.00
5 Maine coon 2
735.00
7 Sphynx
2
1235.00
8 Nebelung
2
985.00
Le premier appel à la procédure affiche bien toutes les races de chiens, et le second, toutes les races de chats.
J'ai fait commencer le nom du paramètre par "p_". Ce n'est pas obligatoire, mais je vous conseille de le faire
systématiquement pour vos paramètres afin de les distinguer facilement. Si vous ne le faites pas, soyez extrêmement
prudents avec les noms que vous leur donnez. Par exemple, dans cette procédure, si on avait nommé le paramètre
espece_id , cela aurait posé problème, puisque espece_id est aussi le nom d'une colonne dans la table Race. Qui plus
est, c'est le nom de la colonne dont on se sert dans la condition WHERE. En cas d’ambiguïté, MySQL interprète
l'élément comme étant le paramètre, et non la colonne. On aurait donc eu WHERE 1 = 1 par exemple, ce qui est
toujours vrai.
Procédure avec deux paramètres, un entrant et un sortant
Voici une procédure assez similaire à la précédente, si ce n'est qu'elle n'affiche pas les races existant pour une espèce, mais
compte combien il y en a, puis stocke cette valeur dans un paramètre sortant.
Code : SQL
DELIMITER |
CREATE PROCEDURE compter_races_selon_espece (p_espece_id INT, OUT
p_nb_races INT)
BEGIN
SELECT COUNT(*) INTO p_nb_races
Partie 5 : Sécuriser et automatiser ses actions
269/414
www.openclassrooms.com
