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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:05:57