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

nightgoblin nightgoblin 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
请看源码:

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


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

相关推荐

评论 3
收藏 已收藏
分享
返回顶部
nightgoblin
MySQL 57,062 成员 56,759 内容