gpt4 book ai didi

mysql - 如何防止 MySQL 在存储过程调用之间缓存变量值?

转载 作者:太空宇宙 更新时间:2023-11-03 10:59:36 24 4
gpt4 key购买 nike

我遇到了一些奇怪的行为,其中存储过程似乎在缓存变量值或调用之间存储过程的输出。这是一个场景:

表 foo

id INT(10);
name VARCHAR2(100);

只有一行,id=5 且 name="a_valid_value"

DELIMITER $$
CREATE PROCEDURE fooProc()
BEGIN
DECLARE testVar INT;
SELECT id into @testVar FROM foo WHERE name = 'a_valid_value';
SELECT @testVar as "testVar";
END;
$$
delimiter ;

CALL fooProc(); -- Outputs 5 as expected

DROP PROCEDURE fooProc;

DELIMITER $$
CREATE PROCEDURE fooProc()
BEGIN
DECLARE testVar INT;
SELECT id into @testVar FROM foo WHERE name = 'NONEXISTENT_VALUE';
SELECT @testVar as "testVar";
END;
$$
delimiter ;

CALL fooProc(); -- Outputs 5!

我更改了存储过程主体并不重要——它仍然在 var testVar 中缓存值 5。使值自行纠正的唯一方法是断开连接然后重新连接。然后,当我调用存储过程的第二个版本时,它会按预期返回一个空值。

最佳答案

@用户 变量,特定于 session 。您想要使用不应具有 @ 前缀的局部变量。从存储过程声明中删除它。

关于mysql - 如何防止 MySQL 在存储过程调用之间缓存变量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16927515/

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