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+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告