mysql存储过程、函数中in、out、inout参数使用实际案例
之前在学习mysql时,通常把笔记记录到word文档,最近打算学习下springdatajpa调用存储过程。(忘记在命令行行中怎么调用存储过程了),找了好久才找到之前的笔记,在此将之前内容拷贝到博客,顺便回顾下存储过程与函数。
存储过程的调用:
1、参数为In类型:
案例功能:求1-n的和
-- 求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 $$ delimiter ; call p1(100);
2、参数为out类型:这里还要注意一点的就是我们的输出参数一定要设置相应类型的初始,否则不管你怎么计算得出的结果都为NULL值
案例功能:求1-n的和
delimiter $$ 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 $$ delimiter ; -- 调用 call p2(100,@res); select @res;
注意:对于第一个输入参数我们可以理解,但是第二个输出参数我们到底应该怎么输?
这里我们需要对第二个参数定义一个变量名(更形象点就是你输入一个输入类型的参数n,由输出参数total往外输出我们只需要定义一个变量名来接收这个输出值即可)
call p2(100,@sum)$//这里的@sum就是我定义用来接收处处total的值
select @sum;
3.参数为INOUT类型
案例功能:传一个年龄,自动让年龄增长10岁
delimiter $$ create procedure p4(inout age int) begin set age=age+10; end $$ -- 调用过程 set @age=8; call p4(@age); select @age;
注意:调用的时候,我这里需要和大家声明一下,inout型的参数值既是输入类型又是输出类型,你给它一个值,值不是变量,不是变量那out的时候它怎么赋给这个值是不是?
因此我们需要先设置一个变量并初始化这个值,调用的时候直接传这个变量即可