ビューからエントリを読み取り、さまざまな条件に応じて別のテーブルに行を挿入する MySQL のプロシージャを作成しています。このコンテキストではsize_id
、 と という名前の最大 4 つの可能な変数がmy_size_1, my_size_2, my_size_3
ありmy_size_4
ます。値がない場合、それらはNULL
です。ストアド プロシージャに次の式を記述すると、SQL エラーが発生します。
-- Insert recommendation options --
INSERT INTO `size_recommendation_options`
VALUES (my_size_recommendation_id, my_size_1);
IF my_size_2 IS NOT NULL THEN
INSERT INTO `size_recommendation_options`
VALUES (my_size_recommendation_id, my_size_2);
END;
IF my_size_3 IS NOT NULL THEN
INSERT INTO `size_recommendation_options`
VALUES (my_size_recommendation_id, my_size_3);
END;
IF my_size_4 IS NOT NULL THEN
INSERT INTO `size_recommendation_options`
VALUES (my_size_recommendation_id, my_size_4);
END;
...ただし、IF
ステートメントを削除するとエラーが修正されます。つまり、以下は問題なく実行されます。
-- Insert recommendation options --
INSERT INTO `size_recommendation_options`
VALUES (my_size_recommendation_id, my_size_1);
INSERT INTO `size_recommendation_options`
VALUES (my_size_recommendation_id, my_size_2);
INSERT INTO `size_recommendation_options`
VALUES (my_size_recommendation_id, my_size_3);
INSERT INTO `size_recommendation_options`
VALUES (my_size_recommendation_id, my_size_4);
何故ですか?これは世界の終わりではありません -DELETE FROM size_recommendation_options WHERE size_id IS NULL
後で追加することはできますが、不要な挿入はすべてストアド プロシージャの速度を大幅に低下させます。最初のブロックが無効な SQL である理由は?
ありがとう。