Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

MySQL: Khắc phục lỗi "not a variable or NEW pseudo-variable" trong Stored Procedure

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.