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

