工控软件用mysql实时存储_MySQL 8 存储函数的创建与调用

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 \G

注意:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值