为何MySQL自定义函数触发Error 1415:不允许返回结果集
解析MySQL函数报错Error 1415的原因
这个错误的根源很直接——你写的函数不符合MySQL自定义函数的语法规则:MySQL的自定义函数必须通过RETURN语句返回单个值,而不能直接用SELECT返回结果集。
看你给出的代码:
CREATE FUNCTION `remover_acentos` (text_1 text) RETURNS text select replace(text_1,'谩芒茫盲茅锚毛铆卯脧贸枚么玫煤没眉脕脗脙脛脡脢脣脥脦脧脫脰脭脮脷脹脺莽脟','aaaaeeeiiioooouuuAAAAEEEIIIOOOOUUUcC');
这里你在RETURNS text之后直接接了select语句,MySQL会把这个select的结果当成一个结果集来处理,但函数的设计目的是返回单个值,不是返回结果集,所以就触发了Error 1415: Not allowed to return a result set from a function这个错误。
修正后的正确写法
你需要把select的结果放到RETURN关键字后面,告诉MySQL这是要返回的单个值:
如果是简单的单行函数,可以直接这么写:
CREATE FUNCTION `remover_acentos` (text_1 text) RETURNS text RETURN replace(text_1,'谩芒茫盲茅锚毛铆卯脧贸枚么玫煤没眉脕脗脙脛脡脢脣脥脦脧脫脰脭脮脷脹脺莽脟','aaaaeeeiiioooouuuAAAAEEEIIIOOOOUUUcC');
如果你的函数后续需要扩展成多语句逻辑,就需要用BEGIN...END块包裹(记得先修改分隔符避免冲突):
DELIMITER // CREATE FUNCTION `remover_acentos` (text_1 text) RETURNS text DETERMINISTIC BEGIN RETURN replace(text_1,'谩芒茫盲茅锚毛铆卯脧贸枚么玫煤没眉脕脗脙脛脡脢脣脥脦脧脫脰脭脮脷脹脺莽脟','aaaaeeeiiioooouuuAAAAEEEIIIOOOOUUUcC'); END // DELIMITER ;
简单来说,函数的核心是“返回一个值”,所以必须用RETURN明确指定这个值,而不是用SELECT去输出结果集。
内容的提问来源于stack exchange,提问作者Joel Marcos
相关产品推荐
相关产品推荐

