MySQL 存储过程

时间:2019-02-04 12:52:32  来源:igfitidea点击:

什么是存储过程?

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

创建存储过程

语法

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

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中创建过程的示例:

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,存储过程也可以通过变量引用返回结果值

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 ;

如何调用存储过程:

call CustOrdersOrders('QUICK');
call CustOrdersCount('QUICK', @variable_name );

SELECT @variable_name;

删除存储过程

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

语法

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

DROP procedure [ IF EXISTS ] procedure_name;

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

示例

如何在MySQL中删除过程:

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

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