IN
输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
OUT
输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
INOUT
输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
传递参数实例:
IN
mysql> create procedure test1(in in_id int(2))-> begin
-> select * from stu.a_player where id=in_id;-> end $$
Query OK,0 rows affected (0.00 sec)
mysql> delimiter ;
#将4传递给in_id变量,执行事务
mysql> call test1(4);+----+---------+-------+| id | name | score |+----+---------+-------+|4| zhaoliu |90|+----+---------+-------+1 row in set (0.00 sec)
#将6传递给in_id变量,执行事务
mysql> call test1(6);+----+------+-------+| id | name | score |+----+------+-------+|6| keke |75|+----+------+-------+1 row in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
OUT
mysql> delimiter $$
mysql> create procedure test2(out aa int)-> begin
-> select aa;-> set aa=2;-> select aa;-> end $$
Query OK,0 rows affected (0.00 sec)
mysql> delimiter ;
#将@aa变量传递给test2 事务
mysql> call test2(@aa);+------+| aa |+------+|NULL|+------+#out向调用者输出参数,不接收输入的参数,所以aa为null1 row in set (0.00 sec)+------+| aa |+------+|2|+------+
事务将aa变量设置为2(设置的是全局),则可进行输出
1 row in set (0.00 sec)
Query OK,0 rows affected (0.00 sec)
mysql> select @aa;+------+| @aa |+------+|2|+------+1 row in set (0.00 sec)
#事务外查询变量,已经被修改
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
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
IN 、OUT、 INOUT 对比
mysql> delimiter //
mysql> create procedure test3(in num1 int,out num2 int,inout num3 int)-> begin
-> select num1,num2,num3;-> set num1=10,num2=20,num3=30;-> select num1,num2,num3;-> end //
Query OK,0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> call test3(@num1,@num2,@num3);+------+------+------+| num1 | num2 | num3 |+------+------+------+|1|NULL|3|+------+------+------+1 row in set (0.00 sec)+------+------+------+| num1 | num2 | num3 |+------+------+------+|10|20|30|+------+------+------+1 row in set (0.00 sec)
Query OK,0 rows affected (0.00 sec)