Sửa lỗi DECLARE trong MySQL: Phải nằm giữa BEGIN và END
Trong MySQL, câu lệnh DECLARE chỉ được sử dụng bên trong stored program (procedure, function, trigger) và phải đặt ngay sau BEGIN, trước các câu lệnh khác.
Cú pháp đúng
BEGIN
DECLARE var1 datatype;
DECLARE var2 datatype;
...
-- các câu lệnh SQL
END
Ví dụ: Stored Procedure đúng chuẩn
mysql> DELIMITER //
mysql> CREATE PROCEDURE declare_Demo()
-> BEGIN
-> DECLARE Name VARCHAR(100);
-> SET Name = 'John';
-> SELECT Name;
-> END
-> //
Query OK, 0 rows affected (0.17 sec)
mysql> DELIMITER ;
Gọi procedure:
mysql> CALL declare_Demo();
Kết quả:
+------+ | Name | +------+ | John | +------+
Lỗi thường gặp
- DECLARE ngoài BEGIN/END: Lỗi "DECLARE is only valid inside a stored program"
- DECLARE sau câu lệnh khác: Phải đặt ngay sau BEGIN
- Thiếu DELIMITER: Khi tạo procedure trong client dòng lệnh
- DECLARE trong trigger: Cũng phải trong BEGIN ... END
Ví dụ sai → đúng
Sai:
CREATE PROCEDURE bad()
BEGIN
SET @x = 1;
DECLARE y INT; -- LỖI: DECLARE sau SET
END
Đúng:
CREATE PROCEDURE good()
BEGIN
DECLARE y INT; -- ĐÚNG: DECLARE ngay sau BEGIN
SET @x = 1;
SET y = 2;
END
MySQL Workbench
- Không cần DELIMITER khi dùng GUI tạo procedure
- Kiểm tra tab "Definition" để xem cấu trúc BEGIN...END
- Sử dụng "Apply" để review SQL trước khi chạy