前两章我们主要讲述了如何创建,查看,调用和删除存储过程,对于存储过程算是有了一个简单的了解,下面我们就来学习下存储过程更深层次的应用。
存储函数部分语法:过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]])
在语法中我们看到,过程名后面是有参数的,在上两章中我们并没有使用,下面我们来详细看下这些参数的具体使用。
参数一共分为三类,分别为IN,OUT和INOUT。
一个参数必须包含类型(IN,OUT和INOUT必为其一),参数名和数据类型三块。数据类型就是我们建字段的时候可选择的数据类型。了解了基本的用法,下面我们就开始创建一个带参数的存储过程。
IN :输入类型参数,调用存储过程的时候指定,该值不能被返回,IN类型为默认值。
demo:
use test;
delimiter //
create procedure test(IN num int)
begin
select num;
set num = 100;
select num;
end
//
delimiter ;
set @aaa = 1;
select @aaa;
call test(@aaa);
select @aaa;
看不出来IN类型参数有什么特点,没关系,没有对比就没有真相,下面我们先来看下OUT类型的参数。
OUT:输出类型参数,可在存储过程内部被改变,并可返回。
demo:
use test;
delimiter //
create procedure test(OUT num int)
begin
select num;
set num = 100;
select num;
end
//
delimiter ;
set @aaa = 1;
call test(@aaa);
select @aaa;
IN和OUT类型的例子都有了,下面我们可以看下差别了。
IN类型测试说明:
set @aaa = 1;//设置用户变量
select @aaa;//结果为1
call test(@aaa);//调用存储过程,对输入类型参数赋值前,输出1,赋值后输出100
select @aaa;//结果仍为1,存储过程未对该变量进行改变
OUT类型测试说明:
set @aaa = 1;//设置用户变量
select @aaa;//结果为1
call test(@aaa);//调用存储过程,对输出变量赋值前,输出null,赋值后输出100
select @aaa;//结果为100,存储过程改变了该变量
经过对比,对于IN和OUT是不是有了进一步的了解了,下面我们来总结一下。
IN类型参数的特点:
1.存储过程中无需赋值即可被调用,值为传入参数值。
2.存储过程内部改变IN类型变量,对于传入的外部变量无任何影响。
OUT类型参数的特点:
1.存储过程中无赋值的时候值为null,即使传入的参数值不为null。
2.存储过程内改变OUT类型变量值,对于传入的外部变量值也随之改变。
IN和OUT类型的参数了解过后,那么INOUT类型参数就不是那么难理解了,因为它是IN和OUT的结合体。
INOUT类型参数的特点:
1.存储过程中无需赋值即可被调用,值为传入参数值。
2.存储过程内改变INOUT类型变量值,对于传入的外部变量值也随之改变。
这下对于三种类型的参数是否有了更加深刻的了解呢。