Error number: MY-013180; Symbol: ER_UDF_ALREADY_EXISTS; SQLSTATE: HY000
Message: Function ‘%s’ already exists.
错误说明
MY-013180,Symbol:ER_UDF_ALREADY_EXISTS ,原因是SQLSTATE:HY000提示,并表示该用户定义功能(UDF)已经存在于MySQL中,不能再被创建。
常见案例
例如,在MySQL中使用CREATE FUNCTION命令,试图定义一个名为udf_name的UDF,但在服务器中已经定义过一个类似的UDF,此时该错误就会出现。
解决方法
1.重新定义UDF并覆盖它。
MySQL中可以使用ALTER FUNCTION命令来覆盖既有的UDF(如果拥有权限的话),只需使用“同样”的UDF名称,其余的参数可以稍有不同,这样便可以覆盖既有的UDF。
2.使用SET SESSION变量覆盖UDF
MySQL中提供了一个叫作sql_replace_functions的变量,可以用来覆盖既有的UDF,这种方法与使用ALTER FUNCTION相比适用范围更广,全 session 都会受到该变量的影响。只需在定义UDF时使用该变量如:
SET SESSION sql_replace_functions = udf_name;
CREATE FUNCTION udf_name () …
3.删除已存在的UDF然后重新建立它
另一种解决方法是使用DROP FUNCTION语句将EXISTS有的UDF删除后,再重新建立UDF。
DROP FUNCTION udf_name;
CREATE FUNCTION udf_name () …
比起使用ALTER FUNCTION变量,这种解决方式的适用范围更广,且不需要再次改变内容,因此也是一种不错的方案。