您的位置:首页 > 数据库

数据库——(17)存储过程

2017-07-26 21:48 176 查看
存储过程简称过程,procedure,一种用来处理数据的方式

存储过程是一种没有返回值的函数

创建过程

基本语法:

create procedure 过程名字([参数列表])

begin 过程体 end

查看过程

函数的查看方式完全适用于过程:关键字换成procedure

查看所有过程:show procedure status[like ‘pattern’];

查看过程创建语句:show create procedure 过程名;

调用过程

过程没有返回值,所以select不能访问。过程有一个专门调用的关键字:call

call 过程名([参数列表]);

修改过程&删除过程

过程只能先删除后新增

drop procedure 过程名;

过程参数

函数的参数需要指定数据类型,过程比函数更严格

过程有自己的类型限定:三种类型

in: 数据只是从外部传入给内部使用(值传递):可以是数值也可以是变量。

out :只允许过程内部使用(不用外部数据);给外部使用的(引用传递:外部的数据会先清空才会进入到内部):只能是变量。

inout:外部可以在内部使用,内部修改也可以给外部使用:典型的引用传递,只能传变量。

基本使用:

create procedure 过程名(in 形参名字 数据类型,out 形参名字 数据类型,inout 形参名字 数据类型)

delimiter $$
create procedure pro1(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 ;


调用:out和inout类型的参数必须传入变量,而不能是数值

-- 设置变量
set @int_1=1,@int_2=2,@int_3=3;
call pro1(@int_1,@int_2,@int_3);


存储过程对于变量的操作(返回)是滞后的:是在存储过程调用结束的时候,才会重新将内部修改的值赋值给外部传入的全局变量。

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,这3个当前是局部变量
-- 修改局部变量
set int_1 = 10;
set int_2 = 100;
set int_3 = 1000;
-- 查看局部变量
select int_1,int_2,int_3;
-- 查看全局变量
select @int_1,@int_2,@int_3;
-- 修改全部变量
set @int_1 = 'a';
set @int_2 = 'b';
set @int_3 = 'c';
-- 查看全部变量
select @int_1,@int_2,@int_3;
end
$$
delimiter ;


设置变量,调用过程

set @int_1:=1,@int_2:=2,@int_3:=3;
call pro2(@int_1,@int_2,@int_3);


结果:



最后:在存储过程调用结束之后,系统会将局部变量重复返回给全局变量(out和inout)。

select @int_1,@int_2,@int_3;


结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: