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
相关产品推荐
相关产品推荐

