Khối mã của bạn không xác định phạm vi cho các biến đã khai báo. Nếu trong một quy trình, chúng phải nằm trong khoảng BEGIN
và END
. Nếu không có chúng, câu lệnh DECLARE varLocalityName VARCHAR(50);
trở thành một câu lệnh không hợp lệ được thực thi. Câu lệnh này tương đương với các câu lệnh được hiển thị bên dưới:
mysql> select current_date();
+----------------+
| current_date() |
+----------------+
| 2012-10-22 |
+----------------+
1 row in set (0.00 sec)
mysql> declare varLocalityName varchar(50);
ERROR 1064 (42000): You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near 'declare varLocalityName varchar(50)' at line 1
mysql>
Hoặc bạn nên khai báo các biến phiên không có từ khóa DECLARE
hoặc tuân theo cú pháp được xác định cho một thủ tục được lưu trữ để sử dụng các biến phạm vi.
Ví dụ 1 :Sử dụng các biến phiên:
mysql> set @x = null;
Query OK, 0 rows affected (0.00 sec)
mysql> select @x;
+------+
| @x |
+------+
| NULL |
+------+
1 row in set (0.00 sec)
mysql> delimiter $$
mysql> select current_date() into @x;
-> $$
Query OK, 1 row affected (0.02 sec)
mysql> select @x;
-> $$
+------------+
| @x |
+------------+
| 2012-10-22 |
+------------+
1 row in set (0.00 sec)
Lưu ý rằng bạn có thể đặt / xác định các biến phiên trong một thủ tục nhưng không phải DECLARE
.
Ví dụ 2 :Sử dụng các biến phạm vi thủ tục:
mysql>
mysql> delimiter $$
mysql> create procedure some_x()
-> begin
-> declare varLocalityName varchar(50);
->
-> set @sessionDate = null;
-> select @sessionDate;
-> set @sessionDate = current_date();
-> select @sessionDate;
->
-> select varLocalityName;
-> end;
-> $$
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql>
mysql> call some_x();
+--------------+
| @sessionDate |
+--------------+
| NULL |
+--------------+
1 row in set (0.00 sec)
+--------------+
| @sessionDate |
+--------------+
| 2012-10-22 |
+--------------+
1 row in set (0.00 sec)
+-----------------+
| varLocalityName |
+-----------------+
| NULL |
+-----------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> select @sessionDate;
+--------------+
| @sessionDate |
+--------------+
| 2012-10-22 |
+--------------+
1 row in set (0.00 sec)
mysql> select varLocalityName;
ERROR 1054 (42S22): Unknown column 'varLocalityName' in 'field list'
mysql>
Ngoài ra, hãy tham khảo Phạm vi và khai báo biến .