7-1回顾和概述
7-2自定义函数简介
1.自定义函数
用户自定义函数(user-defined function, UDF)是一种对MySQL扩展的途径, 其用法与内置函数相同。
自定义函数的两个必要条件:
- a.参数
- b.返回值
函数可以返回任意类型的值,同样可以接受这些类型的参数;
函数的参数与返回值之间,没有必然的联系。
2.创建自定义函数
CREATE FUNCTION function_name
RETURNS
{STRING|INTEGER|REAL|DECIMAL}
routine_body - 函数体
3.关于函数体
- (1)函数体由合法的SQL语法构成;
- (2)函数体可以是简单的SELECT或INSERT语句;
- (3)函数体如果为复合结构则使用BEGIN...END语句;
- (4)复合结构可以包括声明,循环,控制结构。
7-3创建不带参数的自定义函数
创建日期时间自定义函数:
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
7-4 创建带有参数的自定义函数
CREATE FUNCTION f2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)
RETURNS FLOAT(10,2) UNSIGNED
RETURN(num1+num2)
删除函数: DROP FUNCTION fun_name;
7-5创建具有复合结构函数体的自定义函数
//创建具有复合结构函数体的自定义函数
修改分隔符:DELEMITER 分隔符
Eg:DELIMITER // /* 将分隔符修改为 '//' */
- 当函数体内需要执行的是多条语句时,要使用BEGIN...END语句
- 且当编写函数体内容的时候,需要使用 DELIMITER 关键字将分隔符先修改为别的,否则编写语句的时候写到 ';' 的时候会直接执行,导致函数编写失败
删除函数:
DROP FUNCTION [IF EXISTS] function_name
Eg:
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