在mysql中运行存储过程时出错

Posted

技术标签:

【中文标题】在mysql中运行存储过程时出错【英文标题】:error when running the stored procedure in mysql 【发布时间】:2016-04-22 15:19:51 【问题描述】:

我正在尝试在mysql中执行一个存储过程,下面是命令:

create procedure insertIntoEMP (IN name1 VARCHAR (50),IN sal1 INT) 
BEGIN 
   insert into student values (name1, sal1) 
END;

但是我遇到了一个错误。我在 mysql 客户端中运行上述命令。请让我知道我哪里出错了。

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在第 1 行的“END”附近使用的正确语法

【问题讨论】:

错误消息说您的程序根据需要还有一个“e”,但看起来很正确。也许在创建后删除第二个空格。 能否请您详细说明。或者让我知道语法是否有任何错误? 【参考方案1】:

insert之后添加;

create procedure insertIntoEMP (IN name1 VARCHAR (50),IN sal1 INT) 
BEGIN 
   insert into student(name, sal) values (name1, sal1) ;
END;

SqlFiddleDemo

将列列表添加到INSERT INTO tab(col_list) VALUES ... 是一种很好的做法。


您可能需要根据您的客户定义delimiter:

如果使用mysql客户端程序定义存储程序 包含分号字符,就会出现问题。 默认情况下,mysql 本身将分号识别为语句分隔符,因此您必须 临时重新定义分隔符,使mysql通过整个 将程序定义存储到服务器。

DELIMITER $$
create procedure insertIntoEMP (IN name1 VARCHAR (50),IN sal1 INT) 
BEGIN 
   insert into student(name, sal) values (name1, sal1) ;
END$$ 
DELIMITER ;

【讨论】:

仍然有错误:创建过程 insertIntoEMP (IN name1 VARCHAR (50),IN sal1 INT) -> BEGIN -> 插入 student(name, sal) 值 (name1, sal1) ; ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 3 行 mysql> END; 的 '' 附近使用 @Pradeep 你加了DELIMITER吗? 如何添加定界仪。 这正在工作。有兴趣知道它是如何解决的。请解释。我来自java开发背景。 @Pradeep 添加了解释

以上是关于在mysql中运行存储过程时出错的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 phpmyadmin 中执行 MYSQL 存储过程时出错

在 MySQL/MariaDB 中创建存储过程时出错

ORA-01722 运行存储过程时出错

运行存储过程时出错

运行存储过程时出错 ERROR 1064 (42000)

Mysql存储过程包括事务,且传入sql数据运行