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

nightgoblin 2016-05-18 12:06:06
请看源码:

-- 创建表
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;


高手帮忙解答下吧,为啥??
...全文
78 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
nightgoblin 2016-05-19
  • 打赏
  • 举报
回复
我自己找到原因了~~
nightgoblin 2016-05-18
  • 打赏
  • 举报
回复
引用 1 楼 ACMAIN_CHM 的回复:
错误提示是什么?
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 24 就是报这个错
ACMAIN_CHM 2016-05-18
  • 打赏
  • 举报
回复
错误提示是什么?

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧