DELIMITER ;
CALL salut_nom(69); -- Baba
CALL salut_nom(5);
-- Choupi
CALL salut_nom(29); -- Fiero
CALL salut_nom(54); -- Bubulle
Cette fois, pas d'erreur. Le dernier appel (avec Bubulle) n'affiche simplement rien.
Il faut au minimum une instruction ou un bloc d'instructions par clause WHEN et par clause ELSE. Un bloc vide BEGIN
END; est donc nécessaire si l'on ne veut rien exécuter.
Utiliser une structure conditionnelle directement dans une requête
Jusqu'ici, on a vu l'usage des structures conditionnelles dans des procédures stockées. Il est cependant possible d'utiliser une
structure CASE dans une simple requête.
Par exemple, écrivons une requête SELECT suivant le même principe que la procédure message_sexe() :
Code : SQL
SELECT id, nom, CASE
WHEN sexe = 'M' THEN 'Je suis un mâle !'
WHEN sexe = 'F' THEN 'Je suis une femelle !'
ELSE 'Je suis en plein questionnement existentiel...'
END AS message
FROM Animal
WHERE id IN (9, 8, 6);
id
nom
message
6 Bobosse Je suis une femelle !
8 Bagherra Je suis un mâle !
9 NULL
Je suis en plein questionnement existentiel...
Quelques remarques :
On peut utiliser les deux syntaxes de CASE.
Il faut clôturer le CASE par END, et non par END CASE (et bien sûr ne pas mettre de ; si la requête n'est pas finie).
Ce n'est pas limité aux clauses SELECT, on peut tout à fait utiliser un CASE dans une clause WHERE par exemple.
Ce n'est par conséquent pas non plus limité aux requêtes SELECT, on peut l'utiliser dans n'importe quelle requête.
Il n'est par contre pas possible d'utiliser une structure IF dans une requête. Cependant, il existe une fonction IF(), beaucoup
plus limitée, dont la syntaxe est la suivante :
Code : SQL
IF(condition, valeur_si_vrai, valeur_si_faux)
Exemple :
Code : SQL
SELECT nom, IF(sexe = 'M', 'Je suis un mâle', 'Je ne suis pas un
Partie 5 : Sécuriser et automatiser ses actions
285/414
www.openclassrooms.com
Précédent

- 285/413

Suivant