MySQL错误1064:存储函数sf_get_empsallist创建失败求助
解决MySQL存储函数创建时的1064语法错误
嘿,我看到你在创建这个存储函数时碰到了1064语法错误,这个问题其实很常见,主要是语句分隔符的设置问题,让我一步步帮你解决:
错误原因分析
MySQL默认的语句分隔符是;,而你的函数体内部包含了多个;(比如变量声明、循环里的语句)。当MySQL执行到第4行declare flag int default 0 ;末尾的;时,会误以为整个CREATE FUNCTION语句已经结束,剩下的代码就会被当成独立的无效语句,从而抛出语法错误。
另外还有两个小细节需要调整:
- 变量名
name是MySQL的保留字,虽然某些版本不会报错,但用它作为变量名存在风险,建议换成emp_name - 你的
close c1;放在了return语句之后,这会导致游标永远无法被关闭(因为return之后函数就直接结束了),需要把它移到return之前
修正后的完整代码
DELIMITER $$ -- 先将语句分隔符改为$$ create function sf_get_empsallist(dname varchar(100)) returns varchar(300) begin declare emplist varchar(300) default ''; declare flag int default 0 ; declare emp_name varchar(100); -- 替换保留字name为emp_name declare sal int; declare c1 cursor for select ename,salary from emp join dept on emp.deptid=dept.deptid where deptname=dname; declare continue handler for not found set flag=1; open c1; myloop: loop fetch c1 into emp_name,sal; if flag=1 then leave myloop; end if; set emplist=concat(emplist,',',emp_name,'-',sal); end loop; close c1; -- 移到return之前,确保游标被关闭 return(substr(emplist,2)); end $$ DELIMITER ; -- 执行完函数后将分隔符改回默认的;
验证方法
执行上面的代码后,你可以调用函数测试是否正常工作:
SELECT sf_get_empsallist('你的部门名称');
这样应该就能顺利创建函数并解决1064语法错误啦!
内容的提问来源于stack exchange,提问作者chokiChoki
相关产品推荐
相关产品推荐

