- 存储过程简称过程:procedure,是一种用来处理数据的方式
- 存储过程是一种没有返回值的函数
创建过程
create procedure 过程名称([参数列表])
begin
end
查看过程
show procedure status [like 'pattern'] [\G];
show create procedure 过程名称 [\G];
调用过程
- 过程没有返回值:select是不能访问的
- 过程的调用使用专门的关键字:call
修改过程 & 删除过程
drop procedure 过程名称;
过程参数
- 函数的参数需要数据类型指定,过程参数比函数参数更加严格
- 过程还有自己的类型限定:三种类型限定
in:数据只能从外部传入到内部使用:值传递:可以是数值也可以是变量
out:数据是给外部使用的:引用传递:外部的数据会先被清空才会传入到内部:只能是变量
inout:外部可以在内部使用,内部修改液可以给外部使用:引用传递:只能是变量
create procedure 过程名称(in 形参名称 数据类型, out 形参名称 数据类型, inout 形参名称 数据类型)
begin
end
delimiter $$
create procedure fun2(in name varchar(20), out age tinyint unsigned, inout gender varchar(10))
begin
select name;
select age;
select gender;
set age = 30;
set gender = 'female';
end
$$
delimiter ;
set @g_age = 18;
set @g_gender = 'male';
call fun2('kitty', @g_age, @g_gender);
delimiter $$
create procedure fun3(out name varchar(20))
begin
end
$$
delimiter ;
set @gname = 'kitty';
select @gname;
call fun3(@gname);
select @gname;
- 存储过程对于变量的操作是滞后的:是在存储过程调用结束的时候才会重新将内部修改的值赋值给外部传入的全局变量
delimiter $$
create procedure fun4(in v1 int, out v2 int, inout v3 int)
begin
select v1, v2, v3;
set v1 = 10;
set v2 = 100;
set v3 = 1000;
select v1, v2, v3;
select @v1, @v2, @v3;
set @v1 = 'a';
set @v2 = 'b';
set @v3 = 'c';
select @v1, @v2, @v3;
end
$$
delimiter ;
set @v1 = 1, @v2 = 2, @v3 = 3;
call fun4(@v1, @v2, @v3);
select @v1, @v2, @v3;