Computer >> Máy Tính >  >> Lập trình >> MySQL

Ý bạn là gì về Phạm vi của các biến bên trong thủ tục được lưu trữ trong MySQL?


Giả sử nếu chúng ta khai báo một biến bên trong khối BEGIN / END thì phạm vi của biến này sẽ nằm trong khối cụ thể này. Chúng ta cũng có thể khai báo một biến có cùng tên bên trong một khối BEGIN / END khác sẽ hoàn toàn hợp pháp nhưng phạm vi của nó sẽ nằm trong khối BEGIN / END của nó. Nó có thể được hiểu với sự trợ giúp của ví dụ sau, trong đó chúng tôi đang tạo một thủ tục để hiển thị phạm vi của các biến -

Ví dụ

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)

Trong thủ tục trên, chúng ta có hai biến có cùng tên, tức là A. Ở đây, khai báo biến bên trong được ưu tiên miễn là nó nằm trong phạm vi. Vấn đề là biến bên trong biến mất khi đạt đến END đầu tiên và nó được gọi là 'OUT OF SCOPE'. Để hiểu khái niệm, hãy gọi thủ tục này như sau -

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)