2

我目前正在编写一个使用 case 语句来确定要运行哪些查询的存储过程。在我的一个查询中是一个 case 表达式,每次尝试保存更改后的过程时都会出现语法错误。如果没有那个 case 表达式,该过程将很好地保存,但一旦添加它就会失败。我知道表达式本身的语法是准确的,所以我想知道在 case 语句中是否允许使用 case 表达式。

例子:

CASE
    WHEN x = 1 THEN
        SELECT
            5 AS 'Col1',
            CASE
                WHEN y = 5 THEN 2 
                ELSE 0
            END AS 'Col2'
        FROM table
        WHERE 1=1
        ;
    WHEN x = 2 THEN
        SELECT
            *
        FROM table2
        ;
    ELSE
        SELECT
            *
        FROM table3
        ;
END CASE;

任何帮助将不胜感激。是否可以在 case 语句中包含 case 表达式?如果是这样,它的格式是否不同?我怎样才能让它工作......?

谢谢!

4

2 回答 2

0

这是我的分隔符。如果我将一般过程的分隔符更改为分号以外的分隔符并最终将其改回一切正常。

于 2016-08-16T17:36:22.457 回答
0

根据MySQL docs,支持嵌套CASE语句,我在 a 中尝试了您的代码test_proc并且它可以工作,我唯一改变的tabletable1因为table

delimiter $$
create procedure test_proc()
begin
    CASE
        WHEN x = 1 THEN
            SELECT
                5 AS 'Col1',
                CASE
                    WHEN y = 5 THEN 2 
                    ELSE 0
                END AS 'Col2'
            FROM table1
            WHERE 1=1;
        WHEN x = 2 THEN
            SELECT
                *
            FROM table2
            ;
        ELSE
            SELECT
                *
            FROM table3
            ;
    END CASE;
end $$
delimiter ;
于 2016-08-16T17:16:32.523 回答