Mysql存储过程查询结果赋值到变量的方法

Mysql存储过程查询结果赋值到变量的方法
 
把查询结果赋值到变量,大部分情况下使用游标来完成,但是如果明确知道查询结果只有一行(例如统计记录的数量,某个字段求和等),其实可以使用set或into的方式来实现赋值。示例代码:
 
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
01
drop table if exists test_tbl;
02
create table test_tbl ( name varchar (20), status int (2));
03
insert into test_tbl values ( 'abc' , 1),( 'edf' , 2),( 'xyz' , 3);
04
 
05
drop procedure IF EXISTS pro_test_3;
06
delimiter //
07
create procedure pro_test_3()
08
begin
09
--  方式 1
10
     DECLARE cnt INT DEFAULT 0;
11
     select count (*) into cnt from test_tbl;
12
     select cnt;
13
 
14
--  方式 2
15
     set @cnt = ( select count (*) from test_tbl);
16
     select @cnt;
17
 
18
--  方式 3
19
     select count (*) into @cnt1 from test_tbl;
20
     select @cnt1;
21
 
22
--  多个列的情况下似乎只能用 into 方式
23
     select max (status), avg (status) into @ max , @ avg from test_tbl;
24
     select @ max , @ avg ;
25
end
26
//
27
delimiter ;
28
 
29
call pro_test_3();
### 如何在 MySQL 存储过程中给变量赋值 #### 定义变量 为了在存储过程中使用变量,首先需要声明这些变量。可以在 `BEGIN` 和 `END` 块内通过 `DECLARE` 关键字来完成此操作。语法如下: ```sql DECLARE var_name [, ...] type [DEFAULT value]; ``` 这里,`var_name` 是要定义的一个或多个变量名,`type` 表示数据类型,而 `[DEFAULT value]` 则用于设定初始值[^4]。 例如,如果想要创建两个整数类型的变量并初始化它们,则可以这样做: ```sql DECLARE num1 INT DEFAULT 0; DECLARE num2 INT DEFAULT 0; ``` #### 使用 SET 或 SELECT INTO 赋值 一旦定义好了变量之后就可以对其进行赋值了。有两种主要的方法来进行这项工作——利用 `SET` 语句或者是 `SELECT...INTO` 结构。 ##### 方法一:使用 SET 语句 这是最简单的方式之一,可以直接将某个表达式的计算结果赋予目标变量。其基本形式为: ```sql SET variable = expression; ``` 比如下面的例子展示了怎样把数值相加的结果存入之前提到过的 `num1` 中去: ```sql SET num1 = num1 + 5; ``` ##### 方法二:使用 SELECT INTO 语句 当希望基于查询得到的数据填充一个或更多个已存在的局部变量时就会用到这种方法。它允许从表里读取特定记录并将字段的内容分别映射至相应的接收者身上。具体写法如下所示: ```sql SELECT column_list INTO variable_list FROM table_reference WHERE condition; ``` 假设有一个名为 `users` 的表格,并且里面含有用户的年龄信息 (`age`) ,那么可以通过执行这样的命令获取某位成员的具体岁数再保存起来供后续处理环节调用: ```sql SELECT age INTO user_age FROM users WHERE username='example_user'; ``` 需要注意的是,在某些情况下可能会遇到多行返回的情况,这时应该确保只有一条符合条件的记录被选中;否则将会抛出错误提示无法继续运行下去[^3]。 对于同时向几个不同的实体传递单一查询所得出来的全部列值的情形而言,也可以采取类似的策略实现批量更新目的: ```sql SELECT colA, colB INTO varA, varB FROM tbl LIMIT 1; ``` 上述代码片段会尝试提取第一条满足限定条件之外的所有其他约束的第一行中的两列数据(`colA`, `colB`) 并依次对应地分配给预先准备好的容器对象(`varA`,`varB`) 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值