mysql自定义函数详解_mysql自定义函数详解
需求:对于数据库中的记录,如果有两条连续的数据的value字段的值相同,则发邮件通知相关人员。
需求分析:告警系统里面的告警检查是通过SQL来进行的,一般的SQL实现不了此功能,因此,这里可以通过函数的方式来实现。
具体实现如下:
1、数据表准备:tb_config_record。新建数据表脚本如下:
create table tb_config_record (id int ,status varchar(20), value varchar(20), updated_at datetime, updated_by varchar(20), created_at datetime, created_by varchar(20)) ;
2、数据准备。脚本如下:
insert into tb_config_record (id , status ,value ,updated_at ,updated_by , created_at , created_by) values(1,’SUCCESS’,’0′,now(),’SYS’,now(),’SYS’);
insert into tb_config_record (id , status ,value ,updated_at ,updated_by , created_at , created_by) values(2,’SUCCESS’,’1′,now(),’SYS’,now(),’SYS’);
insert into tb_config_record (id , status ,value ,updated_at ,updated_by , created_at , created_by) values(3,’SUCCESS’,’2′,now(),’SYS’,now(),’SYS’);
insert into tb_config_record (id , status ,value ,updated_at ,updated_by , created_at , created_by) values(4,’SUCCESS’,’3′,now(),’SYS’,now(),’SYS’);
insert into tb_config_record (id , status ,value ,updated_at ,updated_by , created_at , created_by) values(5,’SUCCESS’,’4′,now(),’SYS’,now(),’SYS’);
insert into tb_config_record (id , status ,value ,updated_at ,updated_by , created_at , created_by) values(6,’SUCCESS’,’6′,now(),’SYS’,now(),’SYS’);
insert into tb_config_record (id , status ,value ,updated_at ,updated_by , created_at , created_by) values(7,’SUCCESS’,’6′,now(),’SYS’,now(),’SYS’);
3、函数编写。
delimiter //
create function has_serial_status() returns integer
begin
declare val varchar(20) ;
declare tmp varchar(20) default null ;
declare result integer default 0 ;
declare value_serials_cursor cursor for select value from tb_config_record where status = ‘SUCCESS’ order by id asc ;
declare exit handler for not found return result;
open value_serials_cursor ;
loop_serials : loop
fetch value_serials_cursor into val ;
if val = tmp then
set result = 1 ;
leave loop_serials ;
else
set tmp = val ;
end if;
end loop ;
close value_serials_cursor ;
return result ;
end //
delimiter ;
4、执行结果
删除id=7的记录后,重新执行函数
总结:
函数按照预期的方式运行,得到正确的结果。具体操作过程中遇见以下困难:
1、函数编写时,每行都要顶格写,不然就会出现如下错误
运行错误:
2、需要在函数语句中添加语句:declare exit handler for not found return result;
否则出现如下错误:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/196090.html原文链接:https://javaforall.cn
相关文章
- mysql 操作数据库基础详解
- MySQL学习(四) SQL连接查询详解数据库
- MySQL 数据对比之旅:一款强大的工具(mysql数据对比工具)
- MySQL参考书籍:实战技巧介绍(mysql参考书籍)
- MySQL中时间戳函数的实践应用(mysql时间戳函数)
- MySQL创建用户的简单步骤(mysql如何创建用户)
- MySQL字母排序技巧实现(mysql字母排序)
- 从MySQL获取事务处理功能?(mysql有事务吗)
- 利用Mysql中的视图与函数提高效率(mysql的视图和函数)
- 配置文件MySQL的.ini文件配置:极致优化(mysql.ini)
- MySQL在局域网上的应用(mysql局域网)
- MySQL 中的日期操作简明详解(mysql日期操作)
- 25行MySQL建表代码,快速创建数据库表格!(mysql建表代码)
- MySQL中的rand函数Note: This is a title and not an article. It is within the word limit of 25 characters.(mysql的rand)
- 使用MySQL中的WEEK函数实现周数计算(mysql 中week)
- 浅谈MySQL中AVG函数的应用与实现(mysql中avg的应用)
- 如何解决MySQL中的错误1231(mysql中1231错误)
- MySQL实现两张表之间数据去重的方法,详解(mysql 两表间去重)
- 58同城 MySQL实战用实践助力成长(58同城mysql实战)
- 详解MySQL中单引号的正确用法(mysql中单引号的打法)
- MySQL 数据库配置文件详解mysqldcncf(mysql_dc.ncf)
- 深入mysql创建自定义函数与存储过程的详解