文章目录
- 1.存储过程传参
- 2.存储过程传参的语法结构
- 3.存储过程传参经典案例
- 3.1.IN类型的传参
- 3.2.IN和OUT同时使用的传参
- 3.3.INOUT类型的传参
1.存储过程传参
在创建存储过程时,存储过程名称后面的括号里是可以传入一些参数的,例如传入一个变量,这个变量可以在存储过程中进行条件判断、引用变量值等等,只需要在调用存储过程时为这个变量赋值即可。
传参就是实际意义上的传递参数,和其他开发语言一样,传参就是讲一个值通过位置变量的方式传递到一组代码中,这组代码就可以引用该变量进行一系列的操作。
在存储过程中使用传参时,通常分为以下三种类型:
- IN类型:
- IN类型的参数是作为输入参数的,意思是将某个值、某个变量传递到存储过程中使用,类似于shell脚本的位置参数$1,在执行脚本时指定$1的内容,就可以将该内容传入到脚本中,一个道理。
- OUT类型:
- OUT类型的参数是作为输出参数的,使用OUT类型的参数通常时存储过程中声明的一个变量,通过各种逻辑在存储过程内部就为变量赋好了值,最后将这个结构返回到终端。
- OUT类型典型的应用就是将存储过程内经过逻辑运算后为变量赋值的结果,直接返回给用户,无需再手动select变量。
- INOUT类型:
- INOUT类型的参数既可以作为输入参数,又可以作为输出参数,当我们希望传入的参数经过存储过程的逻辑运算后,再将传入的参数输出时,可以采用此类型。
存储过程的传参一般都是传的一个自定义变量或者局部变量。
2.存储过程传参的语法结构
CREATE PROCEDURE 存储过程名称 ([IN/OUT/INOUT 参数名称 参数类型])
BEGIN
SQL语句
END
3.存储过程传参经典案例
3.1.IN类型的传参
创建一个proc_3的存储过程,传入username变量到存储过程,在存储过程中声明一个user_zsxm的局部变量,然后将传入的username变量值赋给user_zsxm变量,最后打印user_zsxm变量的值。
1) 编写存储过程
create procedure proc_3(in username varchar(10)) #传入username这个变量到存储过程并设置varchar类型
begin
declare user_zsxm varchar(10); #声明user_zsxm局部变量
set user_zsxm := username; #将传入的username变量值赋给user_zsxm变量
select user_zsxm; #打印user_zsxm变量的值
end;
2)调用存储过程
在创建存储过程时,()里面可以传入很多个变量参数,多个参数之间以逗号分隔,在调用存储过程时,直接填写变量对应的值即可,如果有多个值,也是以逗号进行分隔,按照从左往右的顺序,依次赋传参给每一个变量。
call proc_3('jiangxl');
调用proc_3存储过程,然后为第一个参数username变量赋值jiangxl,通过存储过程的运算,jiangxl这个值会赋给user_zsxm变量,最后又会打印user_zsxm这个变量,输出结果还是jiangxl。
调用存储过程时,可以直接写具体的值,也可以将另外一个变量的值赋给传参时的变量。
3.2.IN和OUT同时使用的传参
OUT类型的传参通常会配合IF流程控制来使用,IF流程控制在后面会讲,这里先使用IN做出类似的效果。
使用IN类型传入username的变量内容,然后在存储过程中为zw变量赋予值,最后使用OUT类型的参数返回zw变量的值。
1)创建存储过程
create procedure proc_4(in username varchar(10),out zhiwu varchar(10)) #传入username变量的值,输出存储过程zhiwu变量的值
begin
declare user_zsxm varchar(10); #声明user_zsxm局部变量
set user_zsxm := username; #将传入的username变量值赋给user_zsxm变量
set zhiwu := '网络工程师'; #为out参数的zhiwu变量赋值
end;
2)调用存储过程
在调用存储过程时,我们需要为每一个传入的参数声明变量值。
本次的案例是通过out类型将存储过程中的变量返回出来,注意out类型是将存储过程内的变量值返回出来,我们想要拿到out类型返回出来的变量值,就需要通过一个用户自定义的变量去接收这个值,否则就不知道这个值输出到了哪里。
首先使用call调用存储过程,传入第一个参数username变量的值,然后定义一个zhiwu自定义变量,通过zhiwu这个自定义变量去接收第二个参数返回的变量值,最后查询我们自定义的zhiwu变量,就可以看到存储过程第二个参数返回的值。
call proc_4('jiangxl',@zhiwu);
select @zhiwu;
3.3.INOUT类型的传参
INOUT参数可以将传入的参数输入到存储过程中进行运算,最后将运算后的新结果返回到终端。
通过inout类型传入一个数字90,在存储过程中将90这个值进行运算,然后将新结果返回出来。
1)创建存储过程
创建存储过程,传入inout类型的参数,类型为double,将传入的变量值乘以0.5,然后将结果再返回给用户。
create procedure proc_5(inout sz_ysh double)
begin
set sz_ysh := sz_ysh * 0.5;
end
2)调用存储过程
由于inout类型即可以传参输入,又可以传参输出,在调用存储过程,输入传参的内容时,无法直接填写变量值,因为输出传参不会识别变量值只会识别变量名,所以需要先将inout的变量通过自定义变量赋值,再调用存储过程时传入自定义的变量,最后再查询变量的新值。
注意自定义的变量名要与inout中的变量名保持一致。
set @sz_ysh := 100
call proc_5(@sz_ysh)
select @sz_ysh