gpt4 book ai didi

mysql - MySQL 存储函数中确定的奇怪 session 变量值

转载 作者:行者123 更新时间:2023-11-29 21:02:19 25 4
gpt4 key购买 nike

我打开 MySQL 命令行客户端,然后输入以下 SQL 语句。

use green;
delimiter $
drop function if exists tstFunction $
create function tstFunction(cnt int) returns int
begin
case when 1 > cnt then set @a1 := 1;
when 5 > cnt then set @a2 := 2;
when 4 > cnt then set @a3 := 3;
else set @a4 := 4;
end case;
return 0;
end $
delimiter ;

select tstFunction(3), @a1, @a2, @a3, @a4;

我要测试的是CASE WHEN复合语句的执行流程。上述SELECT语句的查询结果如下:

tstFunction(3)    @a1   @a2    @a3    @a4
0 NULL NULL NULL NULL

我对 @a2 的值感到困惑。为什么NULL?为什么不是2
因此,我打开一个新的 MySQL 命令行客户端并重建 tstFuncton,但将 SELECT 语句分成两行,如下所示:

select tstFunction(3);
select @a1, @a2, @a3, @a4;

新的查询结果看起来不错:

@a1   @a2    @a3    @a4
NULL 2 NULL NULL

SELECT 语句的第一种形式发生了什么?为什么我需要将其分成两个 SELECT 语句?

最佳答案

在MySQL中,声明局部变量与“set”语句一起使用。在第一种形式的 SELECT 语句中,您直接编写了它们,所以为什么会得到 NULLS。

您可能有一个疑问,您已经在函数中声明了它们。但问题是,执行函数和打印变量位于单个 SELECT 语句中,这意味着它们作为单个批处理执行。

在第二种形式中,当您在两个不同的批处理中运行两个 SELECT 时,变量将使用函数中的值进行声明。

如果您想让它们与您的第一种形式的 SELECT 一起出现,请像这样在之前声明一个变量,

set @a2 = '';
select tstFunction(3), @a1, @a2, @a3, @a4;

关于mysql - MySQL 存储函数中确定的奇怪 session 变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37109689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com