MySQL 8 存储函数的创建与调用

原创 创建时间:2019-01-28 访问量:136 赞:0 踩:0

MySQL中的存储函数与存储过程不同的是,存储函数有一个返回值,可以在SELECT语句中调用,存储函数用于简化复杂的计算过程:

shell> vi function.sql;
DROP FUNCTION IF EXISTS get_sal_level;
DELIMITER $$
CREATE FUNCTION get_sal_level(emp int) RETURNS
VARCHAR(10)
DETERMINISTIC
BEGIN
DECLARE sal_level varchar(10);
DECLARE avg_sal FLOAT;
SELECT AVG(salary) INTO avg_sal FROM salaries WHERE
emp_no=emp;
IF avg_sal < 50000 THEN
SET sal_level = 'BRONZE';
ELSEIF (avg_sal >= 50000 AND avg_sal < 70000) THEN
SET sal_level = 'SILVER';
ELSEIF (avg_sal >= 70000 AND avg_sal < 90000) THEN
SET sal_level = 'GOLD';
ELSEIF (avg_sal >= 90000) THEN
SET sal_level = 'PLATINUM';
ELSE
SET sal_level = 'NOT FOUND';
END IF;
RETURN (sal_level);
END
$$
DELIMITER ;

创建函数:

mysql> SOURCE function.sql;
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.01 sec)

函数的调用,你需要传入一个参数:

#You have to pass the employee number and the function returns the income level.
mysql> SELECT get_sal_level(10002);
+----------------------+
| get_sal_level(10002) |
+----------------------+
| SILVER |
+----------------------+
1 row in set (0.00 sec)
mysql> SELECT get_sal_level(10001);
+----------------------+
| get_sal_level(10001) |
+----------------------+
| GOLD |
+----------------------+
1 row in set (0.00 sec)
mysql> SELECT get_sal_level(1);
+------------------+
| get_sal_level(1) |
+------------------+
| NOT FOUND |
+------------------+
1 row in set (0.00 sec)

列出数据库中的函数可以使用:

SHOW FUNCTION STATUS\G

查看某个已创建的函数,可以使用:

SHOW CREATE FUNCTION <function name>\G

注意:

在创建函数的语句后面加上 DETERMINISTIC 关键字是非常重要的。如果一个存储例程序被考虑为deterministic,那么针对相同的输入的参数,这个例程总是会返回相同的结果,而not deterministic 正好相反。黙认是not deterministic,如果要声明 deterministic 则需要显示的指定。

将 NON DETERMINISTIC 例程声明为 DETERMINISTIC 可能会导致意外结果,导致优化器选择错误的计划。 将 DETERMINISTIC 例程声明为 NON DETERMINISTIC 可能会导致优化无法使用,从而降低性能。

评论
 我想说:
==已经到底了==
关注: 粉丝: 积分:
工联信息网
如有问题请致邮箱:need@glxxw2018.com(仅限本站无法查询到的资料);本站能够查询到的资料请关注“工联信息网”公众号,通过页面提供的资源码查询!
不良信息反馈及侵权投诉建议请致邮箱:accusation@glxxw2018.com