MySQL 存储过程中变量的范围是什么意思?


假设在 BEGIN/END 块中声明了一个变量,那么此变量的范围将在这个特定块中。我们还可以在另一个 BEGIN/END 块中声明一个同名变量,这完全合法,但其范围将位于其 BEGIN/END 块中。可以借助以下示例来理解,在该示例中,我们创建了一个过程来显示变量的范围 -

示例

mysql> Create Procedure Scope_variables()
    -> BEGIN
    -> DECLARE A Varchar(5) Default 'outer';
    -> BEGIN
    -> DECLARE A Varchar(5) Default 'inner';
    -> SELECT A;
    -> END;
    -> SELECT A;
    -> END;
    -> //
Query OK, 0 rows affected (0.08 sec)

在上面的过程中,我们有具有相同名称的两个变量,即 A。只要在范围内,内部变量的声明就具有优先权。关键在于,在达到第一个 END 时,内部变量就会消失,并且称为“超出范围”。要理解这个概念,请按照以下方式调用此过程 -

mysql> CALL Scope_variables();
+-------+
| A     |
+-------+
| inner |
+-------+
1 row in set (0.00 sec)

+-------+
| A     |
+-------+
| outer |
+-------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

更新日期: 22-Jun-2020

179 次浏览

开启您的 职业

完成课程获得认证

开始
广告