sql >> Database >  >> RDS >> Mysql

Wat is er mis met mijn MySQL CASE/WHEN-syntaxis?

Na het bekijken van uw opmerking met betrekking tot de vaste instructie maar onmiddellijk tweede probleem, was het duidelijk dat u dit niet gebruikt binnen een opgeslagen procedure of functie. De documentatie voor flow control statements geeft heel subtiel aan dat ze binnen opgeslagen procedures/functies moeten vallen.

Werk uw code bij zodat deze binnen een procedure valt en roep vervolgens de procedure aan om uit te voeren:

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

Merk ook op dat ik een allesomvattende ELSE . heb toegevoegd blok; als je de waarde niet vangt, CASE zal een "Case niet gevonden" waarschuwing geven - wat al dan niet wenselijk kan zijn.




  1. record selecteren van orakel

  2. nodejs mysql bulk INSERT op DUPLICATE KEY UPDATE

  3. Extraheer tekens rechts van een begrensde waarde in een SELECT-instructie

  4. Kenmerken van een rapport