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

MySQL 5.7.21创建NVL自定义函数触发1064语法错误的原因排查

解决MySQL 5.7.21创建自定义NVL函数的1064语法错误

嘿,这个语法错误的原因一眼就能看出来——你的CASE语句结尾多写了一个case!MySQL里的CASE表达式只需要用END收尾,不需要额外加case,这就是触发ERROR 1064的直接原因。

错误代码的核心问题

你原来的RETURN语句里:

RETURN case when expr1 = '' or expr1 is NULL then expr2 ELSE expr1 end case

最后那个end case是不符合MySQL语法规则的,正确的CASE结构应该是CASE ... END,END后面不需要再加case。

修正后的完整可执行代码

下面是调整后的正确SQL代码:

DELIMITER // 
CREATE FUNCTION `nvl`(`expr1` text,`expr2` text) 
RETURNS text CHARSET utf8 
BEGIN 
    RETURN CASE 
        WHEN expr1 = '' OR expr1 IS NULL THEN expr2 
        ELSE expr1 
    END; 
END // 
DELIMITER ;

额外小优化提示

其实在MySQL里,如果你只是想实现类似Oracle的NVL功能(同时处理NULL和空字符串),也可以用更简洁的IF函数替代CASE语句,效果完全一致:

DELIMITER // 
CREATE FUNCTION `nvl`(`expr1` text,`expr2` text) 
RETURNS text CHARSET utf8 
BEGIN 
    RETURN IF(expr1 IS NULL OR expr1 = '', expr2, expr1); 
END // 
DELIMITER ;

内容的提问来源于stack exchange,提问作者Jarod Sun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:00:32