我尝试使用if-elseif语句在MySQL中创建存储过程,但它似乎不起作用。我可以创建一个运行if或elseif但不运行实际开关的过程。
CREATE DEFINER=`root`@`%` PROCEDURE `sp_do_something`(
IN setting VARCHAR(30),
IN setting2 VARCHAR(30),
IN if_else_switch VARCHAR(20))
DETERMINISTIC
IF @if_else_switch = 'foo' then
BEGIN
...
END;
elseif @if_else_switch = 'bar' then
BEGIN
...
END;
END IF;
然后我用
来调用它CALL `database`.`sp_do_something`('setting', 'setting2', 'foo');
完成没有任何错误但只返回"受影响的行:0"并且似乎没有做任何实际的SQL代码。
我猜测它与调用查询的最后一个值有关,并且它不知何故被它捕获 - 但为什么?
答案 0 :(得分:3)
试试这个
CREATE DEFINER=`root`@`%` PROCEDURE `sp_do_something`(
IN setting VARCHAR(30),
IN setting2 VARCHAR(30),
IN if_else_switch VARCHAR(20))
DETERMINISTIC
IF if_else_switch = 'foo' then
......
elseif if_else_switch = 'bar' then
.......
END IF;
当你将@
与变量一起使用时,它是全局变量,并且值持续到会话结束。
在你的情况下,if_else_switch是参数,所以它是局部变量。所以使用局部变量代替全局变量