创建SQL存储过程时CONCAT_WS语法报错,请求技术支持
解决MySQL存储过程创建时的1064语法错误
看起来你遇到的问题其实不是CONCAT_WS的参数问题,而是存储过程定义的基础语法错误——存储过程名称后面必须加上括号(),哪怕这个过程不需要接收任何参数。MySQL的解析器因为这个语法问题,才会错误地把后续的代码识别成非法格式,进而抛出那些指向CONCAT_WS的误导性错误提示。
你原来的代码里,CREATE PROCEDURE selectContacts后面缺少了括号,这是违反MySQL存储过程定义语法的。修正后的完整代码应该是这样的:
DELIMITER $$ CREATE PROCEDURE selectContacts() -- 这里补上了空括号 BEGIN SELECT master_id, CONCAT_WS(" ", l_name, f_name) AS display_name FROM master_name ORDER BY l_name, f_name; END $$ -- 注意用自定义分隔符$$结束存储过程定义 DELIMITER ; -- 最后把分隔符恢复回默认的;
额外补充几个细节:
- 结束存储过程定义时,一定要用你设置的自定义分隔符
$$,之后记得把分隔符改回默认的;,避免后续SQL语句执行出错。 - 你提到2个月前这个语句还能正常运行,大概率是当时的代码里包含了括号,这次编写时不小心遗漏了;或者当时使用的MySQL版本对这个语法的容错性更高,但从标准语法来说,括号是必须的。
内容的提问来源于stack exchange,提问作者ptK
相关产品推荐
相关产品推荐

