在SQL中我们我们经常会用到count(),avg(),sum()等这些函数,这些是SQL中自带的函数,当系统中的自带函数不能满足我们的需要时,我们可以自定义函数来完成我们的功能。
自定义函数是一种与存储过程十分相似的过程式数据库对象。它与存储过程一样,都是由 SQL 语句和过程式语句组成的代码片段,并且可以被应用程序和其他 SQL 语句调用。
自定义函数与存储过程的区别:
1.输出参数:自定义函数不能拥有输出参数,因为其本身就是输出参数;而存储过程可以包含输出参数。
2.RETURN语句,自定义函数必须有一条RETURN语句;存储过程不能有RETURN语句
3.可以直接在SQL语句中调用自定义函数;存储过程需要使用call来调用。
创建
create function 函数名([参数列表]) returns 数据类型
begin
sql语句;
return 值;
end;
示例:
create function fundemo(num INT) returns int
BEGIN
RETURN num+666;
END;
-- 调用函数
SELECT fundemo(0);
输出:666
再来一个demo:定义一个判断网站浏览量等级的函数,<100为C,100到1000为B,大于1000为A
DROP FUNCTION IF EXISTS rankABC; -- 存在函数时将函数删除
create function rankABC(num INT) returns VARCHAR(10)
BEGIN
DECLARE rank varchar(10); -- declare关键字定义变量
IF num<=100 THEN
set rank = 'C'; -- set关键字用来给变量赋值
ELSEIF (num>100 and num<1000) THEN
set rank = 'B';
ELSE
set rank = 'A';
END IF;
return rank;
END
-- 调用函数
SELECT *,rankABC(alexa) from websites;