MySql 存储过程笔记
存储过程
存储过程简称过程,procedure,是一种没有返回值的函数
创建过程:
Create procedure 过程名字([参数列表])
Begin
过程体
End
查看过程
函数的查看方式完全适用于过程:关键字换成procedure
Show procedure status [like ‘’];
查看创建语句
Show create procedure pro1;
调用过程(过程没有返回值,select不能访问)
过程有一个专门的调用关键字:call
Call pro1();
修改过程&删除过程
过程是不能修改的,只能先删除后新增
Drop procedure 过程名
过程的参数问题
过程参数
函数的参数需要数据类型指定,过程比函数更严格
过程有自己的类型限定
In : 数据只是从外部传入给内部使用(值传递),可以是数值,也可以是变量
Out : 只允许过程内部使用(不用外部数据),给外部使用(引用传递:外部的数据先清空,才会进入到内部):(言外之意)只能是变量。
Inout : 外部的可以在内部使用,内部修改亦可以给外部使用,只能是变量
使用语法:
Create procedure 过程名(in 形参名字 数据类型,out 形参名字数据 类型,inout形参名字数据 类型)
调用:out 和 inout 传入必须是变量,不能是数值
必须传入变量
-- 设置变量
set @int_1 := 1;
set @int_2 := 2;
set @int_3 := 3;
select @int_1,@int_2,@int_3;
call pro1(@int_1,@int_2,@int_3);
select @int_1,@int_2,@int_3;
存储过程对用变量的操作(返回)是滞后的,是在存储过程结束的时候把内部的修改的值赋值给外部传入的全局变量。
测试
传入数据:1,2,3
-- 设置变量
set @int_1 := 1;
set @int_2 := 2;
set @int_3 := 3;
call pro2(@int_1,@int_2,@int_3);
1. 说明了局部变量和全局变量无关
2. 在存储过程调用结束之后,系统把局部变量赋值给全局变量(只限out 和 inout两种类型)
写了这么多,其实没什么用,主要解决了存储过程没有返回值的问题。做到了把内部的结果返回给外部使用