mysql -- 存储过程 in out inout

存储过程参数IN OUT INOUT对比

1.参数in的使用(代表输入,意思说你的参数要传到存过过程的过程里面去)

//  为了避免存储过程中分号(";")结束语句,我们使用分隔符告诉mysql解释器,该段命令是否已经结束了。

/**
 *需求:求1-n的和
 */
delimiter $
create procedure p1(in n int)
begin
declare total int default 0;
declare num int default 0;
while num < n do
set num:=num+1;
set total:=total+num;
end while;
select total;
end$

call p1(10)$

创建并执行完存储过程,运行结果如下:

2.参数out的使用(代表往外输出)

// 这里还要注意一点的就是我们的输出参数一定要设置相应类型的初始,否则不管你怎么计算得出的结果都为NULL值

/**
 * 需求:求1-n的和
 */

create procedure p2(in n int,out total int)
begin
declare num int default 0;
set total:=0;
while num < n do
set num:=num+1;
set total:=total+num;
end while;
end$

注意:对于第一个输入参数我们可以理解,但是第二个输出参数我们到底应该怎么输?
这里我们需要对第二个参数定义一个变量名(更形象点就是你输入一个输入类型的参数n,由输出参数total往外发射输出我们只需要定义一个变量名来接收这个输出值即可)
call p2(100,@sum)$//这里的@sum就是我定义用来接收处处total的值
select @sum$
创建并执行完存储过程(查询定义的变量值),运行结果如下:

总结in、out区别:
in:表示输入一个值,你需要一个值,我给你一个值
out:你往外输出一个值,你输出的那个值我就拿一个变量来接收你给我输出的那个值

3.参数inout的使用(既能输入一个值又能传出来一个值)

/**
 *功能:传入年龄,自增长10
 */
create procedure p3(inout age int)
begin
set age:=age+10;
end$

注意:调用的时候,我这里需要和大家声明一下,inout型的参数值既是输入类型又是输出类型,你给它一个值,值不是变量,不是变量那out的时候它怎么赋给这个值是不是?
因此我们需要先设置一个变量并初始化这个值,调用的时候直接传这个变量即可。
set @currentAge=8$
call p3(@currentAge)$
select @currentAge$
创建并执行完存储过程,运行结果如下:

 总结:

1. IN 输入参数

表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值,仅需要将数据传入存储过程,并不需要返回计算后的该值。只能当做传入参数

2. OUT 输出参数

该值可在存储过程内部被改变,并可返回,不接受外部传入的数据,仅返回计算之后的值。只能当做转出参数

3. INOUT 输入输出参数

调用时指定,并且可被改变和返回,需要数据传入存储过程经过调用计算后,再传出返回值。可当做传入转出参数

原文地址:https://www.cnblogs.com/daijiabao/p/11289811.html