MySQL存储过程变量

时间:2019-11-20 08:52:20  来源:igfitidea点击:

简介:在本教程中,您将了解存储过程中的变量,如何声明和使用变量。
此外,您还将了解变量的范围。

变量是一个命名的数据对象,其值在存储过程执行期间可以更改。
您通常在存储过程中使用变量来保存即时结果。
这些变量是存储过程的本地变量。

使用变量之前,必须对其进行声明。

声明变量

要在存储过程中声明变量,请使用DECLARE语句,如下所示:

DECLARE variable_name datatype(size) [DEFAULT default_value];

使用以下语法:

  • 首先,在DECLARE关键字之后指定变量的名称。
    变量名称必须遵循MySQL表列名称的命名规则。

  • 其次,指定变量的数据类型和长度。
    变量可以具有任何MySQL数据类型,例如INT,VARCHAR和DATETIME。

  • 第三,使用DEFAULT选项为变量分配默认值。
    如果在不指定默认值的情况下声明变量,则其值为NULL。

以下示例声明一个名为totalSale的变量,其数据类型为DEC(10,2),默认值为0.0,如下所示:

DECLARE totalSale DEC(10,2) DEFAULT 0.0;

MySQL允许您使用单个DECLARE语句声明共享相同数据类型的两个或多个变量。
下面的示例声明两个整数变量x和y,并将其默认值设置为零。

DECLARE x, y INT DEFAULT 0;

分配变量

声明变量后,即可使用它。
要为变量分配值,请使用SET语句:

SET variable_name = value;

例如:

DECLARE total INT DEFAULT 0;
SET total = 10;

赋值后总变量的值为10。

除了SET语句外,您还可以使用SELECT INTO语句将查询结果分配给变量,如以下示例所示:

DECLARE productCount INT DEFAULT 0;

SELECT COUNT(*) 
INTO productCount
FROM products;

在此示例中:

  • 首先,声明一个名为productCount的变量并将其值初始化为0。

  • 然后,使用SELECT INTO语句为productCount变量分配从产品表中选择的产品数量。

可变范围

变量具有其自己的范围,该范围定义了变量的生存期。
如果在存储过程中声明变量,则当存储过程的END语句到达时,它将超出范围。

当您在块BEGIN END中声明变量时,如果到达END,它将超出范围。

MySQL允许您声明两个或多个在不同范围内共享相同名称的变量。
因为变量仅在其范围内有效。
但是,在不同的范围内声明具有相同名称的变量不是好的编程习惯。

名称以@符号开头的变量是会话变量。
在会话结束之前,它是可用且可访问的。

放在一起

以下示例说明了如何在存储过程中声明和使用变量:

DELIMITER $$

CREATE PROCEDURE GetTotalOrder()
BEGIN
	DECLARE totalOrder INT DEFAULT 0;
    
    SELECT COUNT(*) 
    INTO totalOrder
    FROM orders;
    
    SELECT totalOrder;
END$$

DELIMITER ;

这个怎么运作。

首先,声明一个变量totalOrder,其默认值为零。
此变量将保存订单表中的订单数。

DECLARE totalOrder INT DEFAULT 0;

其次,使用SELECT INTO语句为变量totalOrder分配从订单表中选择的订单数量:

SELECT COUNT(*) 
INTO totalOrder 
FROM orders;

第三,选择变量totalOrder的值。

SELECT totalOrder;

请注意,您将在后续教程中学习如何实际使用变量。
本教程中的示例仅是一个示例,以便您理解该概念。

该语句调用存储过程GetTotalOrder():

CALL GetTotalOrder();

在本教程中,您学习了如何在存储过程中声明和使用变量。