[ELSE instructions]
END CASE
Exemple : on reprend la procédure avant_apres_2010(), qu'on réécrit avec CASE, et en donnant une possibilité en plus. De
plus, on passe le message en paramètre OUT pour changer un peu.
Code : SQL
DELIMITER |
CREATE PROCEDURE avant_apres_2010_case (IN p_animal_id INT, OUT
p_message VARCHAR(100))
BEGIN
DECLARE v_annee INT;
SELECT YEAR(date_naissance) INTO v_annee
FROM Animal
WHERE id = p_animal_id;
CASE
WHEN v_annee < 2010 THEN
SET p_message = 'Je suis né avant 2010.';
WHEN v_annee = 2010 THEN
SET p_message = 'Je suis né en 2010.';
ELSE
SET p_message = 'Je suis né après 2010.';
END CASE;
END |
DELIMITER ;
CALL avant_apres_2010_case(59, @message);
SELECT @message;
CALL avant_apres_2010_case(62, @message);
SELECT @message;
CALL avant_apres_2010_case(69, @message);
SELECT @message;
Comportement particulier : aucune correspondance trouvée
En l'absence de clause ELSE, si aucune des conditions posées par les différentes clauses WHEN n'est remplie (quelle que soit la
syntaxe utilisée), une erreur est déclenchée.
Par exemple, cette procédure affiche une salutation différente selon la terminaison du nom de l'animal passé en paramètre :
Code : SQL
DELIMITER |
CREATE PROCEDURE salut_nom(IN p_animal_id INT)
BEGIN
DECLARE v_terminaison CHAR(1);
SELECT SUBSTRING(nom, -1, 1) INTO v_terminaison -- Une position
négative signifie qu'on recule au lieu d'avancer.
FROM Animal
-- -1 est donc
la dernière lettre du nom.
WHERE id = p_animal_id;
CASE v_terminaison
WHEN 'a' THEN
SELECT 'Bonjour !' AS Salutations;
WHEN 'o' THEN
SELECT 'Salut !' AS Salutations;
WHEN 'i' THEN
Partie 5 : Sécuriser et automatiser ses actions
283/414
www.openclassrooms.com
END CASE
Exemple : on reprend la procédure avant_apres_2010(), qu'on réécrit avec CASE, et en donnant une possibilité en plus. De
plus, on passe le message en paramètre OUT pour changer un peu.
Code : SQL
DELIMITER |
CREATE PROCEDURE avant_apres_2010_case (IN p_animal_id INT, OUT
p_message VARCHAR(100))
BEGIN
DECLARE v_annee INT;
SELECT YEAR(date_naissance) INTO v_annee
FROM Animal
WHERE id = p_animal_id;
CASE
WHEN v_annee < 2010 THEN
SET p_message = 'Je suis né avant 2010.';
WHEN v_annee = 2010 THEN
SET p_message = 'Je suis né en 2010.';
ELSE
SET p_message = 'Je suis né après 2010.';
END CASE;
END |
DELIMITER ;
CALL avant_apres_2010_case(59, @message);
SELECT @message;
CALL avant_apres_2010_case(62, @message);
SELECT @message;
CALL avant_apres_2010_case(69, @message);
SELECT @message;
Comportement particulier : aucune correspondance trouvée
En l'absence de clause ELSE, si aucune des conditions posées par les différentes clauses WHEN n'est remplie (quelle que soit la
syntaxe utilisée), une erreur est déclenchée.
Par exemple, cette procédure affiche une salutation différente selon la terminaison du nom de l'animal passé en paramètre :
Code : SQL
DELIMITER |
CREATE PROCEDURE salut_nom(IN p_animal_id INT)
BEGIN
DECLARE v_terminaison CHAR(1);
SELECT SUBSTRING(nom, -1, 1) INTO v_terminaison -- Une position
négative signifie qu'on recule au lieu d'avancer.
FROM Animal
-- -1 est donc
la dernière lettre du nom.
WHERE id = p_animal_id;
CASE v_terminaison
WHEN 'a' THEN
SELECT 'Bonjour !' AS Salutations;
WHEN 'o' THEN
SELECT 'Salut !' AS Salutations;
WHEN 'i' THEN
Partie 5 : Sécuriser et automatiser ses actions
283/414
www.openclassrooms.com
