ERROR 1172 (42000): Result consisted of more than one row
Revenons maintenant à notre nouvelle procédure compter_races_selon_espece() et exécutons-la. Pour cela, il va falloir lui
passer deux paramètres : p_espece_id et p_nb_races.
Le premier ne pose pas de problème, il faut simplement donner un nombre, soit directement soit par l'intermédiaire d'une variable,
comme pour la procédure afficher_race_selon_espece().
Par contre, pour le second, il s'agit d'un paramètre sortant. Il ne faut donc pas donner une valeur, mais quelque chose dont la
valeur sera déterminée par la procédure (grâce au SELECT ... INTO), et qu'on pourra utiliser ensuite : une variable
utilisateur !
Code : SQL
CALL compter_races_selon_espece (2, @nb_races_chats);
Et voilà ! La variable @nb_races_chats contient maintenant le nombre de races de chats. Il suffit de l'afficher pour vérifier.
Code : SQL
SELECT @nb_races_chats;
@nb_races_chats
5
Procédure avec deux paramètres, un entrant et un entrant-sortant
Nous allons créer une procédure qui va servir à calculer le prix que doit payer un client. Pour cela, deux paramètres sont
nécessaires : l'animal acheté (paramètre IN), et le prix à payer (paramètre INOUT).
La raison pour laquelle le prix est un paramètre à la fois entrant et sortant est qu'on veut pouvoir, avec cette procédure, calculer
simplement un prix total dans le cas où un client achèterait plusieurs animaux.
Le principe est simple : si le client n'a encore acheté aucun animal, le prix est de 0. Pour chaque animal acheté, on appelle la
procédure, qui ajoute au prix total le prix de l'animal en question.
Une fois n'est pas coutume, commençons par voir les requêtes qui nous serviront à tester la procédure. Cela devrait clarifier le
principe. Je vous propose d'essayer ensuite d'écrire vous-mêmes la procédure correspondante avant de regarder à quoi elle
ressemble.
Code : SQL
SET @prix = 0;
-- On initialise @prix à 0
CALL calculer_prix (13, @prix); -- Achat de Rouquine
SELECT @prix AS prix_intermediaire;
CALL calculer_prix (24, @prix); -- Achat de Cartouche
SELECT @prix AS prix_intermediaire;
CALL calculer_prix (42, @prix); -- Achat de Bilba
SELECT @prix AS prix_intermediaire;
CALL calculer_prix (75, @prix); -- Achat de Mimi
SELECT @prix AS total;
On passe donc chaque animal acheté tour à tour à la procédure, qui modifie le prix en conséquence. Voici quelques indices et
rappels qui devraient vous aider à écrire vous-mêmes la procédure.
Partie 5 : Sécuriser et automatiser ses actions
271/414
www.openclassrooms.com
Précédent

- 271/413

Suivant