Biến khai báo trong khối BEGIN/END chỉ có hiệu lực trong khối đó. Có thể khai báo biến trùng tên trong khối lồng nhau - hoàn toàn hợp lệ nhưng phạm vi riêng biệt.
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)
Gọi thủ tục:
mysql> CALL Scope_variables(); +-------+ | A | +-------+ | inner | -- SELECT đầu tiên trong khối con +-------+ +-------+ | A | +-------+ | outer | -- SELECT thứ hai trong khối cha (biến inner đã out of scope) +-------+
Biến inner ưu tiên trong khối con. Khi gặp END đầu tiên, biến inner hết hiệu lực (out of scope), biến outer lại hiện hữu.