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
答案 0 :(得分:1)
您可以使用IF ELSE
,也可以构建并执行动态SQL。