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 ;
Questions techniques sur MYSQL

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *