mysql插入存储过程抛出错误

Posted

技术标签:

【中文标题】mysql插入存储过程抛出错误【英文标题】:mysql insert stored procedure throwing an error 【发布时间】:2020-05-23 22:51:31 【问题描述】:

我正在尝试使用 Heidisql 在 mysql 中编写存储过程。我不断收到错误。下面是截图:

下面是存储过程的脚本。

CREATE PROCEDURE index_insertPersonadata
(

  IN p_firstName   VARCHAR(50),
  IN p_middleName  VARCHAR(50),
  IN p_lastName    VARCHAR(50),
  IN p_address     VARCHAR(200),
  IN p_City        VARCHAR(50),
  IN p_State       VARCHAR(50),
  IN p_ZIP         VARCHAR(50)
)

BEGIN

INSERT INTO personalrecord(

FirstName,
MiddleName,
LastName,
Address,
City,
state,
ZIP
)
VALUES
(
    p_firstName,
    p_middleName,
    p_lastName,
    p_address,
    p_City,
    p_State,
    p_ZIP
);
END;

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

就您的问题而言,您只是缺少delimiter 命令:

DELIMITER //
CREATE PROCEDURE index_insertPersonadata (
  IN p_firstName   VARCHAR(50),
  IN p_middleName  VARCHAR(50),
  IN p_lastName    VARCHAR(50),
  IN p_address     VARCHAR(200),
  IN p_City        VARCHAR(50),
  IN p_State       VARCHAR(50),
  IN p_ZIP         VARCHAR(50)
)
BEGIN
    INSERT INTO personalrecord(FirstName, MiddleName, LastName, Address, City, state, ZIP)
    VALUES(p_firstName, p_middleName, p_lastName, p_address, p_City, p_State, p_ZIP);
END;
//

DELIMITER ;

为什么你需要这个是explained in the documentation:

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

要重新定义 mysql 分隔符,请使用delimiter 命令。

【讨论】:

以上是关于mysql插入存储过程抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

MySQL存储过程无用的错误

mysql在未插入的存储过程中插入语句

Mysql存储过程——异常处理

mysql写存储过程对单表插入测试数据,出问题

当我的mysql存储过程没有找到任何结果时,我想抛出一个异常

Java存储过程中的getOutputStream抛出错误