MySQL “not a variable or NEW pseudo-variable”消息。我的存储过程中出现这个错误是什么原因
为了消除这个错误消息,让我们看一个样例。但在此之前,让我们了解如何修复这个问题。
使用变量从存储过程中获取值。变量将在其前面加上@符号。语法如下 –
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);
Query OK,1 row affected(0.13 sec)
使用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的记录。现在您将不会收到错误消息。
阅读更多:MySQL 教程
极客教程