You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 8.0版本出现Error 1064错误,存储过程语法问题求助

解决MySQL 8.0存储过程Error 1064语法错误的问题

我来帮你定位这个问题,Error 1064在存储过程创建时最常见的原因是语句分隔符冲突,另外你的代码里还有变量使用的小问题,我一步步给你拆解:

1. 核心问题:默认分隔符;的冲突

MySQL默认用;作为语句结束标记,但存储过程内部的每个SQL语句也会用;,这就会导致MySQL提前终止存储过程的定义,触发语法错误。解决这个问题的方法是先临时修改分隔符,比如改成//,创建完存储过程后再改回;。

2. 变量使用的问题

你声明了局部变量num(不带@),但后面赋值时却用了会话变量@num,这两个是完全不同的变量:

  • DECLARE num INTEGER; 定义的是存储过程内部的局部变量,作用域仅限当前存储过程,不需要加@前缀
  • @num 是会话变量,不需要DECLARE声明,作用域覆盖整个当前数据库连接

如果你的需求是用局部变量,那应该把SELECT identificador INTO @num改成SELECT identificador INTO num;如果就是要用会话变量,那可以直接去掉DECLARE num INTEGER;这一行。

修正后的完整代码

使用局部变量的版本

DELIMITER //
CREATE DEFINER= `root`@`localhost` PROCEDURE `articulos_ricardo_parte1`()
BEGIN
    DECLARE num INTEGER;
    SELECT identificador INTO num FROM articulos WHERE empleado = 'Ricardo';
    CALL articulos_ricardo_parte2();
END //
DELIMITER ;

使用会话变量的版本

DELIMITER //
CREATE DEFINER= `root`@`localhost` PROCEDURE `articulos_ricardo_parte1`()
BEGIN
    SELECT identificador INTO @num FROM articulos WHERE empleado = 'Ricardo';
    CALL articulos_ricardo_parte2();
END //
DELIMITER ;

额外检查点

  • 确保articulos表确实存在,且包含identificador和empleado字段
  • 确保articulos_ricardo_parte2这个存储过程已经提前创建完成,否则调用时会触发另一个存在性错误

内容的提问来源于stack exchange,提问作者Tania Ragozina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 11:52:30