sql >> Databáze >  >> RDS >> Mysql

Co je špatného na mé syntaxi MySQL CASE/WHEN?

Po přezkoumání vašeho komentáře týkajícího se opraveného příkazu, ale hned druhého problému, bylo jasné, že to nepoužíváte v rámci uložené procedury nebo funkce. Dokumentace pro příkazy řízení toku velmi jemně uvádí, že musí být v rámci uložených procedur/funkcí.

Aktualizujte svůj kód tak, aby byl součástí procedury, a pak stačí zavolat proceduru, která se má provést:

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

Všimněte si také, že jsem přidal univerzální ELSE blok; pokud nezachytíte hodnotu, CASE zobrazí varování „Případ nenalezen“ – což může nebo nemusí být žádoucí.




  1. Výkonnostní důsledky plánování událostí MySQL

  2. psycopg2.ProgrammingError:chyba syntaxe na nebo blízko chyby stdin při pokusu o copy_from redshift

  3. Pokud MYSQL nerozlišuje malá a velká písmena, Jak to funguje pro pole Heslo v Přihlášení?

  4. Nelze nainstalovat pg gem na Windows