可以在MySQL中有条件地声明多少语句?

时间:2009-10-15 00:12:35

标签: mysql switch-statement case

MySQL手册says CASE语句(WHEN部分)可以包含statement_list。

确切地说是多少陈述?我需要执行一个非常大的查询,我想参数化。但是,这也意味着我需要更改正在连接的表。我已经读过,使用CASE语句无法做到这一点,所以我正在寻找一种解决方案,不必为每个参数值重新创建存储过程......

更新 我尝试使用CURSOR解决它。我为每个对象定义了一个CURSOR。我想使用IF-ELSE语句来选择打开,循环和关闭哪个游标。但是我无法正确理解语法...

所有游标和变量(usb,obj,mm,stamp)都用不同的名称声明,但我已将它们缩短为阅读....

if OBJECTTYPE = 1 then
open CUR_1_BUILDING;
LOOP1: loop
    fetch CUR_1_BUILDING into usb, obj, mm, stamp;
    if no_more_rows then
        close CUR_1_BUILDING;
        leave loop1;
    end if;
    INSERT INTO ObjectCache (usb, obj, mm, date_checked) VALUES (usb, obj, mm, now());
end loop LOOP1;
    CLOSE CUR_1_BUILDING;
else if OBJECTTYPE = 2 then
open CUR_2_CITY;
LOOP2: loop
    fetch CUR_2_CITY into usb, obj, mm, stamp;
    if no_more_rows then
        close CUR_2_CITY;
        leave loop2;
    end if;
    INSERT INTO ObjectCache (usb, obj, mm, date_checked) VALUES (usb, obj, mm, now());
end loop LOOP2;
    close CUR_2_CITY;
end if;

这是否可以使用CASE语句?

BEGIN
    CASE
        when OBJECTTYPE = 1
            INSERT INTO ObjectCache SELECT id FROM Building
        when OBJECTTYPE = 2
            INSERT INTO ObjectCache SELECT id FROM City
    END CASE;
END

1 个答案:

答案 0 :(得分:1)

您可以使用IF ELSE,也可以构建并执行动态SQL。