在MySQL

时间:2016-01-11 12:16:21

标签: mysql sql if-statement

我尝试使用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代码。

我猜测它与调用查询的最后一个值有关,并且它不知何故被它捕获 - 但为什么?

1 个答案:

答案 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是参数,所以它是局部变量。所以使用局部变量代替全局变量

了解更多知识http://www.java2s.com/Tutorial/MySQL/0201__Procedure-Function/LOCALSESSIONANDGLOBALVARIABLESINMYSQL.htm