Mysql
 sql >> Database >  >> RDS >> Mysql

Cosa c'è di sbagliato nella mia sintassi MySQL CASE/WHEN?

Dopo aver esaminato il tuo commento relativo all'istruzione fissa ma al secondo problema immediato, era chiaro che non lo stai utilizzando all'interno di una procedura o funzione memorizzata. La documentazione per flow control statements afferma in modo molto sottile che devono essere all'interno di procedure/funzioni archiviate.

Aggiorna il tuo codice in modo che sia all'interno di una procedura, quindi chiama semplicemente la procedura da eseguire:

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();

Nota anche che ho aggiunto un catch-all ELSE bloccare; se non cogli il valore, CASE genererà un avviso "Caso non trovato", che potrebbe essere desiderabile o meno.