19. 存储过程

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

创建过程

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

在这里插入图片描述

查看过程

  • 函数查看方式适用于查看过程
show procedure status [like 'pattern'] [\G]; 	-- 默认是\g
show create procedure 过程名称 [\G]; 			-- 默认是\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; -- v2的值一定是NULL
	
	-- 修改局部变量的值
	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;

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值