MySQL “不是變數或 NEW 偽變數” 訊息。我的儲存過程中出現此錯誤是什麼原因?


為了消除此錯誤訊息,讓我們看一個示例。但在那之前,讓我們先了解一下解決此問題的概念。

使用變數從儲存過程中獲取值。變數將以 @ 符號開頭。語法如下:

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

要檢視變數的值,您需要使用 select 語句。語法如下:

SELECT @yourVariableName;

為了理解以上語法,讓我們建立一個表並在表中插入一些記錄。

建立表的查詢如下:

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

現在使用 insert 命令在表中插入一些記錄。查詢如下:

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)

使用 select 語句顯示錶中的所有記錄。查詢如下:

mysql> select *from StoredProcedureDemo;

輸出如下:

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

以下是返回值的儲存過程。建立儲存過程的查詢如下:

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 ;

現在使用一些值呼叫儲存過程:

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

查詢成功,影響 1 行 (0.13 秒)

使用 select 語句檢查變數 @UserMessage 的值。查詢如下:

mysql> select @UserMessage;

輸出如下:

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

現在再次檢查表記錄。查詢如下:

mysql> select *from StoredProcedureDemo;

輸出如下:

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

檢視上面的示例輸出,已插入一個新的 id 為 3 的記錄。現在您將不會收到錯誤訊息。

更新於: 2019-07-30

1K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.