Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was ist falsch an meiner MySQL CASE/WHEN-Syntax?

Nachdem Sie Ihren Kommentar zur behobenen Anweisung, aber zum unmittelbar zweiten Problem überprüft hatten, war klar, dass Sie dies nicht innerhalb einer gespeicherten Prozedur oder Funktion verwenden. Die Dokumentation für flow control statements gibt sehr subtil an, dass sie in gespeicherten Prozeduren/Funktionen enthalten sein müssen.

Aktualisieren Sie Ihren Code so, dass er sich in einer Prozedur befindet, und rufen Sie dann einfach die auszuführende Prozedur auf:

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

Beachten Sie auch, dass ich einen Catch-all ELSE hinzugefügt habe Block; wenn Sie den Wert nicht abfangen, CASE wird eine "Fall nicht gefunden"-Warnung ausgeben - was wünschenswert sein kann oder nicht.