什么是MySQL存储过程中变量的作用域?
假设我们在BEGIN/END块中声明了一个变量,那么该变量的作用域将仅在该块内。我们还可以在另一个BEGIN/END块中声明同名的变量,这是完全合法的,但其作用域将仅在该块内。我们可以通过以下示例来理解:我们创建一个存储过程来显示变量的作用域。
阅读更多:MySQL 教程
示例
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)