如果具有插入语句的块失败,则多个MySQL

时间:2012-06-27 19:17:43

标签: mysql

我正在MySQL中编写一个从视图中读取条目的过程,并根据各种条件将行插入另一个表中。在这种情况下,我最多有4个size_id变量,名为my_size_1, my_size_2, my_size_3my_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?

感谢。

2 个答案:

答案 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

输入值不能为空,因此您无需担心空插入。