MySQLのマニュアルには、CASEステートメント(WHEN部分)にstatement_listを含めることができると記載されています。
正確にはどのくらいのステートメントですか?パラメータ化したいかなり大きなクエリを実行する必要があります。ただし、これは、結合されているテーブルを変更する必要があることも意味します。これはCASEステートメントを使用して実行できないことを読んだので、存在するすべてのパラメーター値に対してストアドプロシージャを再作成する必要がない解決策を探しています...
UPDATECURSOR を使用して解決しようとしました。持っているすべてのオブジェクトに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