1

自定义函数概念

用户自定义函数(user-defined function, UDF)是一种对MySQL扩展的途径, 其用法与内置函数相同。
自定义函数的两个必要条件:

  • 参数
  • 返回值 (只能有一个)

MySQL自定义函数支持最多1024个参数.

创建自定义函数

CREATE FUNCTION function_name
RETURNS {STRING|INTEGER|REAL|DECIMAL|...}
routine_body -- 函数体

关于函数体

  1. 函数体由合法的SQL语法构成;
  2. 函数体可以是简单的SELECTINSERT语句;
  3. 函数体如果为复合结构则使用BEGIN...END语句;
  4. 复合结构可以包括声明,循环,控制结构。
不带参数的自定义函数

例如创建日期时间自定义函数:

CREATE FUNCTION f1() 
RETURNS varchar(30)
return DATE_FORMAT(NOW(),'%Y年%m月%d日 %H点:%i分:%s秒');
--使用函数
SELECT f1();

DATE_FORMAT()函数在格式化日期格式时,应该是百分号在代表年、月、日的字母前面,字母的大小写不同,所表示格式也有所区别:

SELECT DATE_FORMAT(NOW(),'%Y-%m-%d');
--其结果是:
2015-07-04
--各字母所表示的含义为:
Y:2015              
y:15
M:july
m:07
D:4th
d:04
带参数的自定义函数
CREATE FUNCTION f2 
(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)
RETURNS FLOAT(10,2) UNSIGNED
RETURN(num1+num2)/2
具有复合结构函数体的自定义函数

这里要用到修改语句分隔符

DELEMITER 分隔符
--如,将语句分隔符修改为 '//'
DELIMITER //  

当函数体内需要执行的是多条语句时,要使用BEGIN...END语句.
且当编写函数体内容的时候,需要使用 DELIMITER 关键字将分隔符 ';' 先修改为别的符合,否则编写语句的时候写到 ';' 时会直接执行,导致函数编写失败.

DELIMITER //
CREATE FUNCTION ADD_USER
(p_id SMALLINT,username VARCHAR(20))
RETURNS INT UNSIGNED
BEGIN
INSERT user(p_id,username) VALUES(p_id,username);
RETURN LAST_INSERT_ID();
END
删除函数
DROP FUNCTION [IF EXISTS] fun_name;

EricMa
4 声望0 粉丝