Instruction CASE dans une procédure stockée avec MySQL
Dans ce tutoriel nous allons découvrir comment utiliser l’instruction CASE pour construire des instructions conditionnelles complexes dans des procédures stockées. En MySQL, l’instruction CASE a les mêmes fonctionnalités que l’instruction IF-THEN-ELSE et a deux syntaxes que nous allons découvrir dans ce tutoriel.
Notez que si vous souhaitez ajouter la logique if-else à une instruction SQL, vous utilisez l’expression CASE, qui est différente de l’instruction CASE décrite dans ce tutoriel.
Syntaxe 1:
CASE valeur WHEN valeur1 THEN instruction1 WHEN valeur2 THEN instruction2 … [ELSE instruction3] END
Dans cette syntaxe, CASE fait correspondre la valeur avec les valeurs « valeur1 », « valeur2 », etc., et renvoie l’instruction correspondant. Si la valeur n’est égale à aucune valeurs CASE renvoie l’instruction dans la clause ELSE si la clause ELSE est spécifiée.
Exemple:
DELIMITER $
CREATE PROCEDURE getDateLivraison(
IN clientID INT,
OUT dateLivraison Date
)
BEGIN
DECLARE pays_client VARCHAR(20);
SELECT pays
INTO pays_client
FROM client
WHERE id = clientID;
CASE pays_client
WHEN 'France' THEN
SET dateLivraison = '01/12/2020';
WHEN 'Allemagne' THEN
SET dateLivraison = '15/05/2020';
ELSE
SET dateLivraison = '00/00/0000';
END CASE;
END$
DELIMITER ;
Syntaxe 2:
CASE WHEN condition1 THEN instruction1 WHEN condition2 THEN instruction2 … [ELSE instruction3] END
Dans cette syntaxe, CASE évalue les conditions spécifiées dans les clauses WHEN. Si une condition est évaluée à true. CASE renvoie l’instruction correspondant dans la clause THEN. Sinon, l’instruction spécifié dans la clause ELSE est renvoyé. Si la clause ELSE n’existe pas, l’expression CASE renvoie NULL.
Exemple:
DELIMITER $
CREATE PROCEDURE getDateLivraison(
IN clientID INT,
OUT dateLivraison Date
)
BEGIN
DECLARE nbrProduit INT DEFAULT 0;
SELECT COUNT(produit)
INTO nbrProduit
FROM client cl
JOIN commande cm
ON cl.id = cm.id;
CASE pays_client
WHEN nbrProduit = 10 THEN
SET dateLivraison = '01/12/2020';
WHEN nbrProduit > 50 THEN
SET dateLivraison = '15/05/2020';
ELSE
SET dateLivraison = '00/00/0000';
END CASE;
END$
DELIMITER ;





