mysql_存储过程

存储过程

存储过程简称过程,procedure,是一种用来处理数据的方式,可以理解为是没有返回值的函数

创建过程
create procedure 过程名([参数列表])
begin
-- 过程体
end

-- 创建过程
create procedure pro1()
select * from my_student;

查看过程:
函数的查看方式适用于过程,关键字换成procedure,
show procedure status[like 'partten'];
-- 查看创建语句
show create procedure 过程名 ;

调用过程,没有返回值,select是不能访问的
使用call调用
call pro1();

修改&删除
只能先删除后新增
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
-- 修改局部变量
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 ;

调用:out和inout类型必须是变量,而不是数值

正确调用
set @int_1=1;
set @int_2=2;
set @int_3=3;
call pro1(@int_1,@int_2,@int_3);
内部修改会影响外部

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

局部变量与全局变量无关,在存储过程调用结束之后,系统会将局部变量重新返回给全局变量(out,inout)

原文地址:https://www.cnblogs.com/qull/p/6597441.html