存储过程
存储过程简称过程,procedure,是- -种用 来处理数据的方式
存储过程是-种没有返回值的函数.
创建过程
create procedure 过程名字(参数列表)
Begin
— 过程体
end
查看过程
函数的查看方式完全适用于过程:关键字换成procedure
查看所有过程:show procedure status(like ‘pattern’);
show procedure STATUS like “%ro%”
查看过程创建语句:show create procedure 过程名
调用过程
过程没有返回值:select 是不能访问的
过程有独有的调用方法 call 过程名();
修改过程&&删除过程
过程只能先删除,后新增
drop procedure 过程名
过程参数
函数的参数需要数据类型指定,过程比函数更严格
过程有自己的类型限定: 三种类型
in:数据只是从外部出入给内部使用(值传递),可以是数值,还可以是变量
out:只允许过程内部使用(不用外部数据),给外部使用(引用传递,外部的数据会被先清空才会进入到内部),只能是变量。
inout:外部的可以在外部使用,内部修改也能在外部使用:典型的引用传递,只能传递变量。
out intout ,类型属于引用传递,内部修改会影响外部。
基本使用
Create procedure 过程名(in 形参名字 数据类型,out 形参名字 数据类型,intout 形参名字 数据类型)
Begin
— 过程体
End
— 过程参数
delimiter $$
create procedure pro2(in int_1 int,out int_2 int,inout int_3 int)
BEGIN
— 查看三个变量
select int_1,int_2,int_3; — int_2的值一定是null;
end
$$
delimiter ;
— 设置变量
set @int_1=10;
set @int_2=100;
set @int_3=1000;
SELECT @int_1, @int_2, @int_3;
call pro2(@int_1,@int_2,@int_3);
SELECT @int_1, @int_2, @int_3;
存储过程对于变量的操作(返回)是滞后的:是在存储过程调用结束的时候,才会重新将内部修改的值赋值给外部传入的全局变量
测试:局部变量和全局变量没有关系
在存储过程调用结束之后:out类型和inout类型会将过程内部对应的局部变量的值重新返回给对应的传入的全局变量。
— 过程参数 2
delimiter $$
create procedure pro3(in int_1 int,out int_2 int,inout int_3 int)
BEGIN
— 查看三个变量1
select int_1,int_2,int_3; — 查看的是局部变量
— 修改局部变量
set int_1=20;
set int_2=200;
set int_3=2000;
— 查看局部变量2
select int_1,int_2,int_3;
— 查看全局变量3
select @int_1,@int_2,@int_3;
-- 修改全局变量<br /> set @int_1='a';<br /> set @int_2='b';<br /> set @int_3='c';-- 查看全局变量4<br /> select @int_1,@int_2,@int_3;<br />end<br />$$<br />delimiter ;
— 设置变量
set @int_1 =10;
set @int_2=100;
set @int_3=1000;
call pro3(@int_1,@int_2,@int_3);
— 结果五
SELECT @int_1, @int_2, @int_3;
结果显示:



