高手帮看看这个存储过程很诡异的错

MySql 码拜 8年前 (2016-02-06) 887次浏览
请看源码:

-- 创建表
DROP TABLE IF EXISTS test;
CREATE TABLE test (
  `t_A` varchar(20) NOT NULL,
  `t_B` varchar(20) DEFAULT NULL,
  `t_C` varchar(20) DEFAULT NULL,
  `t_D` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`t_A`)
);
-- 创建存储过程
DROP PROCEDURE IF EXISTS p_test_a;
CREATE PROCEDURE p_test_a
(i_a VARCHAR(20),
 i_b VARCHAR(20))
BEGIN
DECLARE v_b VARCHAR(20);
SET v_b="b4";
IF v_a="1" THEN
  BEGIN
    UPDATE test SET t_A="a4" WHERE t_B=v_b; 
  END;
ELSE
  BEGIN
    INSERT INTO test VALUES ("a5","b5","c5","d5");
  END;
END IF;
BEGIN
    INSERT INTO test VALUES ("a6","b6","c6","d6");
END;
IF i_b="1" THEN
  BEGIN
    UPDATE test SET t_A="a4" WHERE t_B=v_b;
  END;
ELSE
  BEGIN
    INSERT INTO test VALUES ("a7","b7","c7","d7");
  END;
END IF;
END;

创建p_test_a 就会报错,但是假如把后面的 IF i_b=”1″ THEN 去掉 就不报错

DROP PROCEDURE IF EXISTS p_test_a;
CREATE PROCEDURE p_test_a
(i_a VARCHAR(20),
 i_b VARCHAR(20))
BEGIN
DECLARE v_b VARCHAR(20);
SET v_b="b4";
IF v_a="1" THEN
  BEGIN
    UPDATE test SET t_A="a4" WHERE t_B=v_b; 
  END;
ELSE
  BEGIN
    INSERT INTO test VALUES ("a5","b5","c5","d5");
  END;
END IF;
BEGIN
    INSERT INTO test VALUES ("a6","b6","c6","d6");
END;
-- IF i_b="1" THEN
  BEGIN
    UPDATE test SET t_A="a4" WHERE t_B=v_b;
  END;
-- ELSE
  BEGIN
    INSERT INTO test VALUES ("a7","b7","c7","d7");
  END;
-- END IF;
END;

高手帮忙解答下吧,为啥?

解决方案

40

错误提示是什么?

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明高手帮看看这个存储过程很诡异的错
喜欢 (0)
[1034331897@qq.com]
分享 (0)