在MySQL的存储过程中使用if语句

在MySQL的存储过程中使用if语句,mysql,sql,if-statement,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' t

我试图用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代码

我猜它和call查询的最后一个值有关,并且它不知何故没有被if捕获,但为什么呢

试试这个

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; 
当您将
@
与变量一起使用时,它是全局变量,并且它的值将持续到会话结束。 在你们的例子中,若selse开关是come参数,那个么它就是局部变量。所以使用局部变量代替全局变量

要了解更多信息,请尝试以下内容

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; 
当您将
@
与变量一起使用时,它是全局变量,并且它的值将持续到会话结束。 在你们的例子中,若selse开关是come参数,那个么它就是局部变量。所以使用局部变量代替全局变量


更多了解

这就是问题所在。谢谢:)这就是问题所在。谢谢:)