mysql存储过程中in、out、inout参数使用

in

代表输入,意思说你的参数要传到存过过程的过程里面去。基本可以理解为传入function的参数,而如果该参数是个变量,那么整个procedure过程结束后,不会影响外部的变量值。

/
案例功能:求1-n的和
开发者:徐守威
时间:2016-08-13
/
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)$

out

可以理解为某个function要改变的外部变量,不管这个变量在外部是什么值,在内部的初始值都是null,而内部对它的影响将改变这个外部变量值。

直接给一个procedure传一个out参数是没有意义的,因为out值在procedure默认都会被初始为null。

/
案例功能:求1-n的和
开发者:徐守威
时间:2016-08-13
*/
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$**

调用 call p2(100,@sum)$//这里的@sum就是我定义用来接收处处total的值
select @sum$

inout

既能输入一个值又能传出来一个值。可以理解为一个function在内部声明了global ,并可能对该变量值进行修改。

/
功能:传一个年龄,自动让年龄增长10岁
开发者:徐守威
时间:2016-08-13
/
create procedure p3(inout age int)
begin
set age:=age+10;
end$
注意:调用的时候,我这里需要和大家声明一下,inout型的参数值既是输入类型又是输出类型,你给它一个值,值不是变量,不是变量那out的时候它怎么赋给这个值是不是?
因此我们需要先设置一个变量并初始化这个值,调用的时候直接传这个变量即可。*

调用:
set @currentAge=8$
call p3(@currentAge)$
select @currentAge$**

猜你喜欢

转载自blog.51cto.com/13708834/2128201
今日推荐