Mrfei 发表于 2018-10-5 12:18:39

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$**

页: [1]
查看完整版本: mysql存储过程中in、out、inout参数使用