MySQL 存储过程


什么是存储过程?

在MySQL中,过程是一个可以传递参数的存储程序。它不像函数那样返回值。

创建存储过程

语法

在MySQL中创建过程的语法为:

1
2
3
4
5
6
7
8
9
CREATE PROCEDURE procedure_name [ (parameter datatype [, parameter datatype]) ]
BEGIN
declaration_section
executable_section
END;
参数 说明
procedure_name 存储过程名称
parameter 可选的。传递给存储过程的一个或多个参数。 参数可以是 IN ,OUT 和IN OUT三种类型
declaration_section 存储过程中进行局部变量声明的地方。
executable_section 存储过程代码

MySQL 存储过程示例

在MySQL中创建过程的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
DELIMITER //
CREATE PROCEDURE `CustOrdersOrders`(in AtCustomerID varchar(5))
BEGIN
SELECT OrderID,
OrderDate,
RequiredDate,
ShippedDate
FROM Orders
WHERE CustomerID = AtCustomerID
ORDER BY OrderID;
END; //
DELIMITER ;

示例2,存储过程也可以通过变量引用返回结果值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DELIMITER //
CREATE PROCEDURE `CustOrdersCount`(in AtCustomerID varchar(5), OUT count_num INT)
BEGIN
DECLARE _id varchar(5);
DECLARE _res INT;
SET _id = AtCustomerID;
SET _res = 3;
SELECT count(OrderID)
INTO _res
FROM Orders
WHERE CustomerID = _id
ORDER BY OrderID;
SET count_num = _res;
END; //
DELIMITER ;

如何调用存储过程:

1
call CustOrdersOrders('QUICK');
1
2
3
call CustOrdersCount('QUICK', @variable_name );
SELECT @variable_name;

删除存储过程

在MySQL中创建过程后,您可能会发现需要将其从数据库中删除。

语法

在MySQL中删除过程的语法是:

1
DROP procedure [ IF EXISTS ] procedure_name;

procedure_name为要删除的存储过程名称

示例

如何在MySQL中删除过程:

1
2
DROP PROCEDURE IF EXISTS CustOrdersOrders;
DROP PROCEDURE IF EXISTS `CustOrdersCount`;

如果存储过程名字有空格 例如 Sales by Year,必须使用 `括起来


原文链接:https://codingdict.com/