Exemple : on reprend la procédure message_sexe(), et on l'adapte pour utiliser CASE.
Code : SQL
DELIMITER |
CREATE PROCEDURE message_sexe2(IN p_animal_id INT)
BEGIN
DECLARE v_sexe VARCHAR(10);
SELECT sexe INTO v_sexe
FROM Animal
WHERE id = p_animal_id;
CASE v_sexe
WHEN 'F' THEN
-- Première
possibilité
SELECT 'Je suis une femelle !' AS sexe;
WHEN 'M' THEN
-- Deuxième
possibilité
SELECT 'Je suis un mâle !' AS sexe;
ELSE
-- Défaut
SELECT 'Je suis en plein questionnement existentiel...'
AS sexe;
END CASE;
END|
DELIMITER ;
CALL message_sexe2(8);
-- Mâle
CALL message_sexe2(6);
-- Femelle
CALL message_sexe2(9);
-- Ni l'un ni l'autre
On définit donc v_sexe comme point de comparaison. Chaque WHEN donne alors un élément auquel v_sexe doit être comparé.
Les instructions exécutées seront celles du WHEN dont l'élément est égal à v_sexe. Le ELSE sera exécuté si aucun WHEN ne
correspond.
Ici, on compare une variable locale (v_sexe) à des chaînes de caractères ('F' et 'M'), mais on peut utiliser différents types
d'éléments. Voici les principaux :
des variables locales ;
des variables utilisateur ;
des valeurs constantes de tous types (0, 'chaîne', 5.67, '2012-03-23',…) ;
des expressions (2 + 4, NOW(), CONCAT(nom, ' ', prenom),…) ;
…
Cette syntaxe ne permet pas de faire des comparaisons avec NULL, puisqu'elle utilise une comparaison de type
valeur1 = valeur2. Or cette comparaison est inutilisable dans le cas de NULL. Il faudra donc utiliser la seconde
syntaxe, avec le test IS NULL.
Seconde syntaxe : toutes conditions
Cette seconde syntaxe ne compare pas un élément à différentes valeurs, mais utilise simplement des conditions classiques et
permet donc de faire des comparaisons de type "plus grand que", "différent de", etc. (bien entendu, elle peut également être
utilisée pour des égalités).
Code : SQL
CASE
WHEN condition THEN instructions
[WHEN condition THEN instructions] ...
Partie 5 : Sécuriser et automatiser ses actions
282/414
www.openclassrooms.com
Précédent

- 282/413

Suivant