使用带有变量的 If Then 运行不同的 SQL 语句

Posted

技术标签:

【中文标题】使用带有变量的 If Then 运行不同的 SQL 语句【英文标题】:Run different SQL statements using If Then with a variable 【发布时间】:2021-04-16 23:18:34 【问题描述】:

尝试做一些非常简单的事情。使用 If/Then,有没有办法根据变量的值运行单独的 Select 语句? 下面代码中的函数GetTotalActiveUnits()返回一个整数。

    set @RetVal =  GetTotalActiveUnits(CustomerCode);
    if  @RetVal = 0 then 
    Select * from tblREF_UnitInfo;
    else
    select * from tblREF_State;
    end if

【问题讨论】:

'mysql 支持 IF、CASE、ITERATE、LEAVE LOOP、WHILE 和 REPEAT 结构用于存储程序中的流控制' - dev.mysql.com/doc/refman/8.0/en/flow-control-statements.html,存储的 prgram 是过程、函数、触发器和事件。 是的,我知道这一点。如我的示例所示,我使用的是 If 构造。 在这种情况下,您的代码没有问题,它可以按编码工作.. 是的,我少了一个分号。除此之外,它还可以嵌入到 SP 中。 【参考方案1】:

您的代码没有问题 - 至少就 IF 而言,如果它在存储例程中。

drop procedure if exists p;
delimiter $$
create procedure p(inp int)
begin
     set @RetVal = inp;# GetTotalActiveUnits(CustomerCode);
    if  @RetVal = 0 then 
     select @retval ;
    else
     select @retval ;
    end if ;

end $$

delimiter ;

call p(1);
+---------+
| @retval |
+---------+
|       1 |
+---------+
1 row in set (0.001 sec)

call p(0)
+---------+
| @retval |
+---------+
|       0 |
+---------+
1 row in set (0.001 sec)

【讨论】:

好吧,我搞砸了。我想我可以将我的代码粘贴到工作台 SQL 语句窗口中并运行它。但它一直显示错误。我从未在实际的 SP 中真正尝试过。我搞砸了。感谢您的帮助。

以上是关于使用带有变量的 If Then 运行不同的 SQL 语句的主要内容,如果未能解决你的问题,请参考以下文章

如果表不存在,如何运行包含针对另一个 sql 实例上的表的查询的 If-Then-Else 语句?

QT 程序包含一个带有 if-test-then 块和转义的必要引号的 bash 脚本问题错误

If-then-else 逻辑来决定运行哪个 select 语句

sql中if then的使用

如何在 PL/SQL 块 (IF/THEN) 中执行“插入...选择...

我可以使用带有两个变量的 case/switch 语句吗?