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