Computer >> Máy Tính >  >> Lập trình >> MySQL

MySQL "không phải là một biến hoặc một biến giả MỚI". Đây là lỗi gì trong Thủ tục đã Lưu trữ của tôi?

Để loại bỏ thông báo lỗi này, chúng ta hãy xem một ví dụ mẫu. Nhưng trước đó chúng ta hãy xem qua khái niệm để khắc phục nó.

Sử dụng biến để nhận giá trị từ thủ tục được lưu trữ. Biến sẽ có tiền tố là ký hiệu @. Cú pháp như sau -

CALL yourStoredProcedureName(yourParameter1,yourParameter2,..........N,@yourVariableName);

Để xem giá trị của biến, bạn cần sử dụng câu lệnh select. Cú pháp như sau -

SELECT @yourVariableName;

Để hiểu cú pháp trên, chúng ta hãy tạo một bảng và chèn một số bản ghi vào bảng.

Truy vấn để tạo bảng như sau -

mysql> create table StoredProcedureDemo
   -> (
   -> Id int,
   -> Name varchar(10)
   -> );
Query OK, 0 rows affected (1.20 sec)

Bây giờ chèn một số bản ghi trong bảng bằng cách sử dụng lệnh chèn. Truy vấn như sau -

mysql> insert into StoredProcedureDemo values(1,'John');
Query OK, 1 row affected (0.31 sec)
mysql> insert into StoredProcedureDemo values(2,'Carol');
Query OK, 1 row affected (0.19 sec)

Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh select. Truy vấn như sau -

mysql> select *from StoredProcedureDemo;

Sau đây là kết quả -

+------+-------+
| Id   | Name  |
+------+-------+
|    1 | John  |
|    2 | Carol |
+------+-------+
2 rows in set (0.00 sec)

Đây là thủ tục được lưu trữ trả về một giá trị. Truy vấn như sau để tạo một thủ tục được lưu trữ -

mysql> DELIMITER //
mysql> create procedure Update_table(IN Id int, IN Name VARCHAR(20),OUT message VARCHAR(50))
   -> BEGIN
   -> set message= 'DATABASE HAS BEEN UPDATED';
   -> INSERT INTO StoredProcedureDemo
   -> values (Id, Name);
   -> end;
   -> //
Query OK, 0 rows affected (0.67 sec)
mysql> DELIMITER ;

Bây giờ hãy gọi thủ tục được lưu trữ với một số giá trị -

mysql> call Update_table(3,'Larry',@UserMessage);

Truy vấn OK, 1 hàng bị ảnh hưởng (0,13 giây)

Kiểm tra giá trị của biến @UserMessage bằng cách sử dụng câu lệnh select. Truy vấn như sau -

mysql> select @UserMessage;

Sau đây là kết quả -

+---------------------------+
| @UserMessage              |
+---------------------------+
| DATABASE HAS BEEN UPDATED |
+---------------------------+
1 row in set (0.00 sec)

Bây giờ hãy kiểm tra các bản ghi bảng một lần nữa. Truy vấn như sau -

mysql> select *from StoredProcedureDemo;

Sau đây là kết quả -

+------+-------+
| Id   | Name  |
+------+-------+
|    1 | John  |
|    2 | Carol |
|    3 | Larry |
+------+-------+
3 rows in set (0.00 sec)

Nhìn vào đầu ra mẫu ở trên, một bản ghi mới với id 3 đã được chèn vào. Bây giờ bạn sẽ không nhận được thông báo lỗi.