- 介绍
```
含义:
- 一组预先编译好的 SQL 语句的集合 , 理解成批处理语句
好处:
1. 类似于Java中的方法2. 提高代码的重用性3. 简化操作
- 减少了编译次数 , 并且减少了和数据库服务器的连接次数 , 提高了效率
特点:
1. 可以有 0 个返回 , 也可以有多个返回
- 适合做批量插入 , 批量更新 ```
- 创建语法
```create procedure 存储过程名(参数列表) begin # 存储过程体 end - 参数列表包含三部分 ( 参数模式 参数名 参数类型,… )
- 参数模式
- in: 被这个修饰的 参数需要传入
- out: 该参数可以作为返回值
- inout: 既可以传入 也可以 返回
- in: 被这个修饰的 参数需要传入
如果存储过程体仅仅只有一句话 , begin end 可以省略,
存储过程体中的每条SQL语句的结尾 , 要求必须加分号
存储过程的结尾可以使用 delimiter 重新设置 语法: delimiter 结束标记
例如: delimiter $
3. 调用方法
call 存储过程名( 实参数列表 )
4. 删除存储过程
drop procedure p1;
---
- 空参案例
```sql
# 创建方法
delimiter $
create procedure myMethod()
begin
insert into user(`user_name`,`age`) values('王麻子',18),('王二狗',18),('李狗蛋',18);
end $
# 调用
call myMethod()$
- 参数为 in 模式
```sql
创建方法
delimiter $ create procedure myMethod(in userName varchar(20),in age int(10)) begin insert into user(user_name,age) values(userName,int); end $
调用
call myMethod(‘王麻子’,10)$
- 参数为 out 模式
```sql
# 创建方法
delimiter $
create procedure myMethod(out a varchar(20))
begin
select u.name into a
from user u
where id=1
end $
# 调用
call myMethod(@userName)$
select @userName$
- 参数为 inout 模式
```sql
创建方法
delimiter $ create procedure myMethod(inout a int(20)) begin set a=a*2; end $
调用
set @number=2;$ call myMethod(@number)$ select @number$ ```
