/*
函数
含义:一组预先编译好的SQL语句的集合
区别:
存储过程:可以有0个返回,也可以有多个返回;适合批量插入,批量更新
函数:有且仅有一个返回;适合处理数据返回一个结果
*/
#一、创建函数
CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
BEGIN
函数体
END
/*
注意:
1. 参数列表 包含两部分:参数名,参数类型
2. 函数体:
肯定会有return语句,如果没有会报错
如果return语句没有放在函数体的最后也不报错,但不建议
return 值;
3. 当函数体中只有一句话,可以省略begin end
4. 使用delimiter语句设置结束标记
*/
#二、调用语句
SELECT 函数名(参数列表);
#三、案例
#1.无参有返回
#返回公司的员工个数
CREATE FUNCTION myf1() RETURNS INT
BEGIN
DECLARE c INT DEFAULT 0;
SELECT COUNT(*) INTO c
FROM employees;
RETURN c;
END $
SELECT myf1()$
#2.有参有返回
#根据员工名返回他的工资
CREATE FUNCTION myf3(empname VARCHAR(20)) RETURNS DOUBLE
BEGIN
#declare s double default 0;
SET @s=0;
#select salary into s
SELECT salary INTO @s
FROM employees
WHERE last_name=empname;
#return s;
RETURN @s;
END $
SELECT myf3('Kochhar')$
# 根据部门号,返回部门平均工资
CREATE FUNCTION myf4(deptname VARCHAR(20)) RETURNS DOUBLE
BEGIN
SET @sal=0;
SELECT AVG(salary) INTO @sal
FROM employees e
JOIN departments d
ON e.department_id = d.department_id
WHERE d.department_name = deptname;
RETURN @sal;
END $
SELECT myf4('Adm')$
#3.函数的查看
SHOW CREATE FUNCTION myf3;
#4.函数的删除
DROP FUNCTION myf3;
#创建函数,输入两个float,返回两者之和
CREATE FUNCTION myf5(var1 FLOAT, var2 FLOAT) RETURNS FLOAT
BEGIN
/*
Set @r=0;
select var1+var2 into @r;
return @r;
*/
DECLARE SUM FLOAT DEFAULT 0;
SET SUM=var1+var2;
RETURN SUM;
END $
SELECT myf5(1.10,2.0)$
网友评论