首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在存储过程中使用变量

在存储过程中使用变量
EN

Stack Overflow用户
提问于 2012-09-14 18:27:25
回答 1查看 164关注 0票数 0

试图找出为什么它是空的。我原以为会打印出7张。

代码语言:javascript
复制
mysql> set @total = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> call getAuthorCount(@total);
+------------------------+
| count(distinct author) |
+------------------------+
|                      7 |
+------------------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.02 sec)

mysql> select @total as totalauthors;
+--------------+
| totalauthors |
+--------------+
|         NULL |
+--------------+

这个过程,

代码语言:javascript
复制
mysql> create procedure getAuthorCount(out authorcount int)
    -> begin
    ->  select count(distinct author) from libbooks;
    -> end
    -> //
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-14 19:18:57

你应该使用INOUT参数-

代码语言:javascript
复制
CREATE PROCEDURE getAuthorCount(INOUT authorcount INT)
BEGIN
  SELECT count(DISTINCT author) FROM libbooks;
END

示例:

当@total值为原样(0进0出)时为

代码语言:javascript
复制
DROP PROCEDURE getAuthorCount;
DELIMITER $$
CREATE PROCEDURE getAuthorCount(INOUT authorcount INT)
BEGIN
  -- SET authorcount = 100;
END$$
DELIMITER ;

SET @total = 0;
CALL getAuthorCount(@total);
SELECT @total AS totalauthors;
+--------------+
| totalauthors |
+--------------+
|            0 |
+--------------+

当@total value替换为存储过程中的新值时为

代码语言:javascript
复制
DROP PROCEDURE getAuthorCount;
DELIMITER $$
CREATE PROCEDURE getAuthorCount(OUT authorcount INT)
BEGIN
  SET authorcount = 100;
END$$
DELIMITER ;

SET @total = 0;
CALL getAuthorCount(@total);
SELECT @total AS totalauthors;
+--------------+
| totalauthors |
+--------------+
|          100 |
+--------------+
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12422667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档