存储过程(Stored Procedure)
:一组可编程的函数,是为了完成特定功能的SQL语句集,经编译
创建并保存在数据库中
,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
为什么需要使用存储过程:
- 简单、安全、高性能。
- 将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用。
- 不要求反复建立一系列处理步骤,保证了数据的完整性。
- 批量处理
创建并使用存储过程
使用create procedure FUNC
来创建存储过程。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| MariaDB [test]> delimiter // # 修改束标识为//
MariaDB [test]> create procedure productprincing()
begin
select avg(prod_price) as priceaverage
from products;
end //
Query OK, 0 rows affected (0.01 sec)
MariaDB [test]> delimiter ; # 修改结束标识为;
MariaDB [test]> call productprincing(); # 调用存储过程
+--------------+
| priceaverage |
+--------------+
| 16.133571 |
+--------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
|
在创建存储过程时,还可以加入参数
IN输入参数
:表示调用者向过程传入值OUT输出参数
:表示过程向调用者传出值(可以返回多个值)INOUT输入输出参数
:既表示调用者向过程传入值,又表示过程向调用者传出值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| MariaDB [test]> delimiter //
MariaDB [test]> create procedure MaxPrice( # 获取特定vend_id下最高价格
in vendId int,
out maxPrice decimal(8,2)
)
begin
select max(prod_price)
from products
where vend_id = vendId
into maxPrice;
end//
Query OK, 0 rows affected (0.00 sec)
MariaDB [test]> call MaxPrice(1001, @max)//
Query OK, 1 row affected (0.01 sec)
MariaDB [test]> select @max//
+-------+
| @max |
+-------+
| 14.99 |
+-------+
1 row in set (0.00 sec)
|
删除存储过程
使用drop procedure FUNC
来删除存储过程。
1
2
| MariaDB [test]> drop procedure if exists MaxPrice//
Query OK, 0 rows affected (0.00 sec)
|
Author
Alfons
LastMod
2018-10-29
License
Creative Commons BY-NC-ND 3.0