我正在MySQL中編寫一個過程,該過程從視圖中讀取條目,並根據各種條件將行插入到另一個表中。在這種情況下,我有多達4個可能的size_id
變量,名爲my_size_1, my_size_2, my_size_3
和my_size_4
。如果他們沒有價值,他們是NULL
。在寫我的存儲過程的結果下面的表達式在SQL錯誤:如果插入語句失敗,MySQL會發生多個錯誤
-- 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
,但所有不必要的插入都會顯着減慢存儲的proc。爲什麼第一個塊無效的SQL?
謝謝。
什麼是SQL的錯誤,特別是? –
'你的SQL語法有錯誤;檢查與您的MySQL服務器版本對應的手冊,以找到在';'附近使用的正確語法。 \t \t \t \t IF my_size_3 IS NOT NULL THEN \t \t \t INSERT INTO'size_recommendati」在行65' – rybosome
正如順便說一句,除非'size_recommendation_options'是在你的MySQL副本的保留字,刪除所有來自反引號你的SQL - 它們只是代碼噪聲。 – Bohemian