您所说的 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 次浏览

开启你的事业

通过完成课程来获得认证

开始学习
广告