13.7.3.1 用户定义函数的 CREATE FUNCTION 语法

CREATE [AGGREGATE] FUNCTION function_name
    RETURNS {STRING|INTEGER|REAL|DECIMAL}
    SONAME shared_library_name

用户定义函数(UDF)是一种使用新函数扩展 MySQL 的方式,该新函数的工作方式类似于本机(内置)MySQL 函数,例如ABS()CONCAT()

  • function_name *是在 SQL 语句中用来调用该函数的名称。 RETURNS子句指示函数的返回值的类型。 DECIMALRETURNS之后的合法值,但当前DECIMAL函数返回字符串值,应像STRING函数一样编写。

  • shared_library_name *是包含实现该功能的代码的共享库文件的基本名称。该文件必须位于插件目录中。该目录由plugin_dir系统变量的值给出。有关更多信息,请参见第 5.6.2 节“安装和卸载用户定义的函数”

要创建功能,您必须具有mysql系统数据库的INSERT特权。这是必需的,因为CREATE FUNCTIONmysql.func系统 table 中添加了一行,用于记录函数的名称,类型和共享库的名称。

活动函数是已被CREATE FUNCTION加载但未被DROP FUNCTION删除的函数。每次服务器启动时都会重新加载所有活动功能,除非您使用--skip-grant-tables选项启动mysqld。在这种情况下,将跳过 UDF 初始化,并且 UDF 不可用。

有关编写用户定义函数的说明,请参见第 28.4.2 节“添加用户定义的功能”。为了使 UDF 机制起作用,必须使用 C 或 C(或可以使用 C 调用约定的另一种语言)编写函数,您的 os 必须支持动态加载,并且必须动态(而非静态)编译mysqld

AGGREGATE函数的工作方式与本机 MySQL 聚合(摘要)函数(如SUMCOUNT())完全相同。

Note

要升级与 UDF 相关联的共享库,请发出DROP FUNCTION语句,升级共享库,然后发出CREATE FUNCTION语句。如果先升级共享库,然后使用DROP FUNCTION,则服务器可能会崩溃。