我正在MySQL中编写一个从视图中读取条目的过程,并根据各种条件将行插入另一个表中。在这种情况下,我最多有4个size_id
变量,名为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?
感谢。
答案 0 :(得分:1)
IF
:关闭 END IF
个区块
http://dev.mysql.com/doc/refman/5.6/en/if-statement.html
13.6.5.2. IF Syntax
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF
在你的情况下:
IF my_size_2 IS NOT NULL THEN
INSERT INTO `size_recommendation_options`
VALUES (my_size_recommendation_id, my_size_2);
END IF;
答案 1 :(得分:0)
您是否尝试过Store程序?,类似这样:
CREATE PROCEDURE insert_val
(
IN a_id INT(11) ,
IN a_first VARCHAR(15)
)
BEGIN
if
INSERT INTO t1(actor_id, first_name )
VALUES (a_id, a_first) ;
END
mysql> call insert_val(10,'a');
Query OK, 1 row affected, 0 warning (0.00 sec)
mysql> call insert_val(null,'a');
ERROR 1048 (23000): Column 'actor_id' cannot be null
输入值不能为空,因此您无需担心空插入。