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

存储过程简称过程,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;

结果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/pianpiannia/article/details/76166040