MySQL Case Select not behaving as expected

后端 未结 2 1734
[愿得一人]
[愿得一人] 2021-01-26 17:01

While creating a more complex stored procedure in MySQL, I encountered a weird problem with my CASE statement. I have simplified my procedure to show the issue. I am selecting t

相关标签:
2条回答
  • 2021-01-26 17:43

    You're mixing the two ways to use CASE. You either write:

    CASE
        WHEN <expression1> THEN <result1>;
        WHEN <expression2> THEN <result2>;
        ...
    END CASE
    

    This evaluates each expression, and executes the corresponding result for the first true one. Or:

    CASE <expression>
        WHEN <val1> THEN <result1>;
        WHEN <val2> THEN <result2>;
        ...
    END CASE
    

    This compares <expression> to each value, and executes the corresponding result for the first one that matches.

    You used the second syntax, but your values also contain a comparison. So they're all either 0 (for false) or 1 (for true), and that's what you're comparing modTemp to. Change to:

        CASE modTemp
            WHEN 1 THEN
                SELECT 1;
            WHEN 2 THEN
                SELECT 2;
            WHEN 0 THEN
                SELECT 3;
            ELSE
                SELECT CONCAT('Error: modTemp = ', modTemp);
        END CASE;
    
    0 讨论(0)
  • 2021-01-26 17:52

    Shouldn't it be more like

    CREATE PROCEDURE `AddPlants` (IN plantNum int)
    

    BEGIN DECLARE count int; DECLARE modTemp int;

    SET count = 1;
    WHILE count <= plantNum DO
        SELECT CONCAT('count = ', count);
        SET modTemp = count % 3;
        SELECT CONCAT('modTemp = ', modTemp);
    
        CASE modTemp
            WHEN 1 THEN
                SELECT 1;
            WHEN 2 THEN
                SELECT 2;
            WHEN 0 THEN
                SELECT 3;
            ELSE
                SELECT CONCAT('Error: modTemp = ', modTemp);
        END CASE;
    
        SET count = count + 1;
    END WHILE;
    

    END//

    0 讨论(0)
提交回复
热议问题