MySQL的存储过程中,关于用户变量的问题

slowside45 2017-07-21 03:27:39
在学习MySQL存储过程的时候,一道例题中,例程调用了一个未定义的用户变量,但却得到了正确输出,我实在不理解,望路过的朋友指点一二。
代码如下:

CREATE PROCEDURE add_id(out count INT)
BEGIN
DECLARE itmp INT;
DECLARE cur_id CURSOR FOR SELECT id FROM sch;
DECLARE EXIT HANDLER FOR NOT FOUND CLOSE cur_id;
SELECT count_sch() INTO count;
SET @sum=0;
OPEN cur_id;
REPEAT
FETCH cur_id INTO itmp;
IF itmp<10
THEN SET @sum= @sum+itmp;
END IF;
UNTIL 0 END REPEAT;
CLOSE cur_id;
END ;


call add_id(@a);
select @a,@sum;

查询结果如下:
+------+--------+
| @a | @sum |
+------+--------+
| 2 | 3 |
+------+-------+
我不理解的地方是@a这个变量是如何被赋值的,还有调用存储过程的语句中的传递参数为什么要用@a
...全文
397 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
AcHerat 元老 2017-07-30
  • 打赏
  • 举报
回复
count 也是一个参数,不过是存储过程的输出参数,具体的赋值语句是 SELECT count_sch() INTO count 调用过程时参数 @a 实际就是 count 的输出值,@sum是调用过程得到的返回值
slowside45 2017-07-30
  • 打赏
  • 举报
回复
引用 2 楼 keflying 的回复:
SELECT count_sch() INTO count; 在这里赋值了。
引用 2 楼 keflying 的回复:
SELECT count_sch() INTO count; 在这里赋值了。
您的意思是这里给add_id的output——count变量赋值了,其实count是形参,@a是实参?
我没有吃饭 2017-07-28
  • 打赏
  • 举报
回复
把@sum 的@去掉试试
keflying 2017-07-23
  • 打赏
  • 举报
回复
SELECT count_sch() INTO count; 在这里赋值了。
shoppo0505 2017-07-21
  • 打赏
  • 举报
回复
@a这个是输出变量, 你call的前面肯定有定义。 然后执行call add_id之后,@a就被赋值了。 @a是add_id的output。 也可以直接return回去,一样的结果。

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧