在MySQL的存储过程中使用if语句
我试图用if-elseif语句在MySQL中创建一个存储过程,但它似乎不起作用。我可以创建一个过程来运行if或elseif,但不使用实际的开关在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
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参数,那个么它就是局部变量。所以使用局部变量代替全局变量
更多了解这就是问题所在。谢谢:)这就是问题所在。谢谢:)