Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quel est le problème avec ma syntaxe MySQL CASE/WHEN ?

Après avoir examiné votre commentaire concernant l'instruction fixe mais le deuxième problème immédiat, il était clair que vous ne l'utilisiez pas dans une procédure stockée ou une fonction. La documentation pour flow control statements indique très subtilement qu'ils doivent se trouver dans des procédures/fonctions stockées.

Mettez à jour votre code pour qu'il soit dans une procédure, puis appelez simplement la procédure à exécuter :

USE mysql;

DROP PROCEDURE p;
DELIMITER |
CREATE PROCEDURE p() BEGIN
    CASE (SELECT COUNT(*) FROM user WHERE User = '' AND Host = 'localhost') 
        WHEN 1 THEN
            DROP USER ''@'localhost';
            FLUSH PRIVILEGES;
        ELSE
            SELECT 'no users found!';
    END CASE;
END;
|

CALL p();

Notez également que j'ai ajouté un attrape-tout ELSE bloquer; si vous ne saisissez pas la valeur, CASE lancera un avertissement "Case not found" - ce qui peut être souhaitable ou non.