gpt4 book ai didi

mysql - 存储过程中的变量范围?

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

我在 mysql 中注意到,为什么准备动态查询需要我认为是全局变量的东西。有没有办法将变量的范围限制在 begin 和 end 语句之间?下面是我的测试脚本,当 limitCnt 变量返回值 10 时。

delimiter //
drop procedure if exists testProc//
create procedure testProc ()
begin
-- DECLARE limitCnt INT default 10;
SET @limitCnt = 10;

PREPARE stmt FROM 'SELECT * FROM `participants` LIMIT ?';
EXECUTE stmt USING @limitCnt; -- the using part of the execute does not like the local variable

DEALLOCATE PREPARE stmt;
end//
call testProc()//
select @limitCnt//

drop procedure testProc//
delimiter ;

最佳答案

如果你想使用局部变量,那么它们必须在 begin...end block 内,但是如果你嵌套了 beginend block 在一些 beginend block 中,然后在“所谓的”父 beginend 中声明的变量code> block 可从“所谓的”子级 beginend block 访问。请通读http://dev.mysql.com/doc/refman/5.0/en/local-variable-scope.html .

您在代码中所做的是设置一个名为 limitCnt 的 session 变量,该变量在您的过程中的任何地方都可以访问和使用,因此当您这样做时,您将得到 10 选择@limitCnt

要使用局部变量,请在 begin...end block 中使用 declare var_name var_type

希望这能回答您的问题。

关于mysql - 存储过程中的变量范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17437909/

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