浅谈MySQL存储过程中declare和set定义变量的区别

 我来答
greystar_cn
2018-01-04 · 知道合伙人软件行家
greystar_cn
知道合伙人软件行家
采纳数:16407 获赞数:17260
本人主要从事.NET C#方向的技术开发工作,具有10多年的各类架构开发工作经验。

向TA提问 私信TA
展开全部
在存储过程中常看到declare定义的变量和@set定义的变量。简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量。

1、declare定义的变量类似java类中的局部变量,仅在类中生效。即只在存储过程中的begin和end之间生效。
2、@set定义的变量,叫做会话变量,也叫用户定义变量,在整个会话中都起作用(比如某个应用的一个连接过程中),即这个变量可以在被调用的存储过程或者代码之间共享数据。如何理解呢?可以看下面这个简单例子,很好理解。

(1)先执行下面脚本,创建一个存储过程,分别有declare形式的变量和@set形式的变量
DROP PROCEDURE IF EXISTS temp;
DELIMITER //CREATE PROCEDURE temp()BEGIN
DECLARE a INT DEFAULT 1; SET a=a+1; SET @b=@b+1; SELECT a,@b;END//DELIMITER ;
(2)接着为b变量初始化。
SET @b=1;

(3)然后重复调用这个存储过程。
CALL temp();

(4)会发现a的值不改变,而b的值会一直增加。

所以,总结起来就是开头那句话,declare定义的类似是局部变量,@set定义的类似全局变量。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式