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

Hvad er der galt med min MySQL CASE/HVORN-syntaks?

Efter at have gennemgået din kommentar vedrørende den faste erklæring, men det øjeblikkelige andet problem, var det klart, at du ikke bruger dette i en lagret procedure eller funktion. Dokumentationen til flowkontroludsagn meget subtilt angiver, at de skal være inden for lagrede procedurer/funktioner.

Opdater din kode til at være inden for en procedure, og kald derefter bare proceduren for at udføre:

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

Bemærk også, at jeg tilføjede en catch-all ELSE blok; hvis du ikke fanger værdien, CASE vil kaste en "Sag ikke fundet" advarsel - hvilket kan være ønskeligt eller måske ikke.




  1. Sådan ændres tabel tilføje kolonne orakel

  2. Brug SET TEXTSIZE til at begrænse de data, der returneres for hver række i SQL Server

  3. Indeks en MySQL-database med Apache Lucene, og hold dem synkroniserede

  4. Golang MySQL fejl - packets.go:33:uventet EOF