Lỗi này thường xảy ra khi gọi stored procedure có tham số OUT nhưng không truyền biến người dùng (user variable) có tiền tố @.
Cách gọi đúng
CALL ten_thu_tuc(tham_so1, tham_so2, ..., @ten_bien_nhan_ket_qua);
Sau đó xem kết quả:
SELECT @ten_bien_nhan_ket_qua;
Ví dụ hoàn chỉnh
1. Tạo bảng
mysql> CREATE TABLE ThuTucDemo (
-> Id INT,
-> Ten VARCHAR(10)
-> );
2. Chèn dữ liệu
mysql> INSERT INTO ThuTucDemo VALUES(1, 'John'), (2, 'Carol');
3. Tạo stored procedure có tham số OUT
mysql> DELIMITER //
mysql> CREATE PROCEDURE CapNhatBang(
-> IN p_Id INT,
-> IN p_Ten VARCHAR(20),
-> OUT p_ThongBao VARCHAR(50)
-> )
-> BEGIN
-> SET p_ThongBao = 'DATABASE HAS BEEN UPDATED';
-> INSERT INTO ThuTucDemo VALUES (p_Id, p_Ten);
-> END //
mysql> DELIMITER ;
4. Gọi procedure với biến @ThongBao
mysql> CALL CapNhatBang(3, 'Larry', @ThongBao);
5. Xem kết quả trả về
mysql> SELECT @ThongBao;
+---------------------------+ | @ThongBao | +---------------------------+ | DATABASE HAS BEEN UPDATED | +---------------------------+
6. Kiểm tra bảng đã cập nhật
mysql> SELECT * FROM ThuTucDemo;
+------+-------+ | Id | Ten | +------+-------+ | 1 | John | | 2 | Carol | | 3 | Larry | +------+-------+
Nguyên nhân lỗi: Nếu bạn gọi CALL CapNhatBang(3, 'Larry', 'bien_thuong'); (biến không có @), MySQL sẽ báo lỗi not a variable or NEW pseudo-variable.