17—— 函数

函数和存储过程非常类似,它们的区别是:

  • 存储过程可以有0个返回值,也可以有多个返回值。
  • 函数必须且只能有1个返回值
  • 存储过程适合于批量的插入、更新等
  • 函数适合做处理后返回一个结果
  • 存储过程调用关键字是 call
  • 函数调用关键字是:select 

一、函数创建、调用、查看和删除

1、创建语法

create function 函数名(参数列表) returns 返回类型
begin
    函数体
end
  • 参数部分:参数名、参数类型
  • 函数体中一定要有return语句,否则会报错
  • 注意参数列表后面的返回关键字是 returns ,而不是 return
  • 函数体中的返回关键字是 return,而不是 returns
  • 当函数体中只有一句话时,可以省略begin  end
  • delimiter来设置结束符

2、调用语法

select 函数名(参数列表)

 3、查看函数

show create function 函数名;

4、删除函数

drop function 函数名;

二、应用实例

【注】:在开头的返回类型后需要加上 DETERMINISTIC、NO SQL、READS SQL DATA 中的一个

1、创建函数,实现传入两个float,返回两者之和

CREATE FUNCTION myfunc(a FLOAT,b FLOAT) RETURNS FLOAT DETERMINISTIC
BEGIN
	RETURN a+b;
END $

SELECT myfunc(10,20)$

2、无参函数:返回公司员工个数

# 创建函数
DELIMITER $
CREATE FUNCTION myf1() RETURNS INT DETERMINISTIC
BEGIN
	DECLARE res INT DEFAULT 0;    # 定义变量
	SELECT COUNT(*) INTO res      # 给变量赋值
	FROM employees;
	RETURN res;
END $

# 调用函数
SELECT myf1() $

    

3、有参函数:根据员工名,返回其工资

CREATE FUNCTION myf2(tname VARCHAR(20)) RETURNS DOUBLE DETERMINISTIC
BEGIN
	DECLARE tsalary DOUBLE DEFAULT 0;
	SELECT salary INTO tsalary
	FROM employees
	WHERE last_name=tname;
	RETURN tsalary;
END $

SELECT myf2('Ozer') $

  

4、根据部门名,返回该部门的平均工资

CREATE FUNCTION myf3(depName VARCHAR(20)) RETURNS DOUBLE DETERMINISTIC
BEGIN
	SET @res:=0;
	SELECT AVG(salary) INTO @res
	FROM employees e
	JOIN departments d ON e.department_id=d.department_id
	WHERE d.department_name=depName;
	RETURN @res;
END $

SELECT myf3('IT') $

   

发布了213 篇原创文章 · 获赞 48 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/Jeffxu_lib/article/details/102476654
今日推荐