自定义函数概念
用户自定义函数(user-defined function, UDF)是一种对MySQL扩展的途径, 其用法与内置函数相同。
自定义函数的两个必要条件:
- 参数
- 返回值 (只能有一个)
MySQL自定义函数支持最多1024个参数.
创建自定义函数
CREATE FUNCTION function_name
RETURNS {STRING|INTEGER|REAL|DECIMAL|...}
routine_body -- 函数体
关于函数体
- 函数体由合法的SQL语法构成;
- 函数体可以是简单的
SELECT
或INSERT
语句; - 函数体如果为复合结构则使用
BEGIN...END
语句; - 复合结构可以包括声明,循环,控制结构。
不带参数的自定义函数
例如创建日期时间自定义函数:
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;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。