0

MySQL手册一个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
4

1 回答 1

1

您可以使用IF ELSE或者您可以构建和执行动态 SQL。

于 2009-10-15T00:17:39.947 回答