0

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
4

1 に答える 1

1

動的SQLを使用するIF ELSEか、ビルドして実行することができます。

于 2009-10-15T00:17:39.947 に答える