Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O que há de errado com a sintaxe CASE/WHEN do MySQL?


Depois de revisar seu comentário sobre a instrução corrigida, mas o segundo problema imediato, ficou claro que você não está usando isso em um procedimento ou função armazenado. A documentação para instruções de controle de fluxo muito sutilmente afirma que eles precisam estar dentro de procedimentos/funções armazenados.

Atualize seu código para estar dentro de um procedimento e, em seguida, basta chamar o procedimento para executar:
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();

Observe também que adicionei um ELSE abrangente quadra; se você não pegar o valor, CASE lançará um aviso de "Caso não encontrado" - o que pode ou não ser desejável.