需求:对于数据库中的记录,如果有两条连续的数据的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;

否则出现如下错误:

mysql怎么自定义一个函数调用_MySQL自定义函数编写相关推荐

  1. mysql 日期时间格式化字符串_MySQL日期函数与日期转换格式化函数大全

    Mysql作为一款开元的免费关系型数据库,用户基础非常庞大,本文列出了MYSQL常用日期函数与日期转换格式化函数 1.DAYOFWEEK(date) SELECT DAYOFWEEK('2016-01 ...

  2. mysql datediff多一天_MySQL DATEDIFF函数获取两个日期的时间间隔的方法

    描述 返回两个日期之间的时间间隔. 语法 DateDiff(interval, date1, date2 [ ,firstdayofweek[ , firstweekofyear]] ) DateDi ...

  3. mysql 5.5 替换字符_MySQL replace函数替换字符串语句的用法

    MySQL replace函数我们经常用到,下面就为您详细介绍MySQL replace函数的用法,希望对您学习MySQL replace函数方面能有所启迪. 最近在研究CMS,在数据转换的时候需要用 ...

  4. mysql查询语句有点难_Mysql惯用函数,难点,注意_mysql

    十一.GROUP BY对结果分组 在与AVG()函数或SUM()函数等聚合函数一起使用时,GROUP BY子句能够发挥最大的作用.GROUP BY子句可以将查询结果分组,并返回行的汇总信息.在带有GR ...

  5. 自定义一个虚拟机+将自定义的虚拟机创建成模板机+快速创建虚拟机

    自定义虚拟机: 配置网络yum源 安装虚拟机: [root@room9pc01 images]# virt-manager cd /var/lib/libvirt/images/ qemu-img c ...

  6. mysql 取最后一个数字_mysql最后一个内容orm

    1.复习面向对象的内容: 编程方式主要有两种:1.面向过程编程2.面向对象编程: 1.面向过程编程的思想就是根据设计要求从上到下一次进行编程.数据和逻辑是不进行分离的 2.面向对象编程:有时候我们在进 ...

  7. Android自定义一个对话框,完全自定义Android对话框AlertDialog的实现

    Android本身封装的AlertDialog.Builder很方便易用,但如果想要自定义弹出对话框的风格,如标题字体背景元素间隔之类的,那就比较困难了. 最近我就遇到了这个问题,一个工程的界面风格全 ...

  8. mysql带中文日期转换_MySQL日期函数与日期转换格式化函数大全

    Mysql作为一款开元的免费关系型数据库,用户基础非常庞大,本文列出了MYSQL常用日期函数与日期转换格式化函数 1.DAYOFWEEK(date) 2.WEEKDAY(date) 3.DAYOFMO ...

  9. mysql控制台增加一个用户_MySQL 纯命令行添加用户

    创建用户: 命令: 1 CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明:username – 你将创建的用户名, host – 指 ...

最新文章

  1. python闭包锁住女神的心
  2. PXE实现Linux的自动安装
  3. 最强无监督行人重识别方法 Cluster Contrast ReID
  4. 蚂蚁金服移动端可视化解决方案 F2 3.2 正式发布
  5. 2016目录怎么生成_0基础学标书编写,目录可以这样生成,不用再手动排页码了...
  6. 去掉IntelliJ IDEA 中 mybatis 对应的 xml 文件警告
  7. local class cannot see outer class defined type, even if it is public
  8. java web过滤器
  9. Excel数据生成SQL insert语句
  10. ARM和X86功耗差别的深层原因探讨
  11. 使用ubuntu系统中遇到的问题及解决方案
  12. 常用标准库_Python入门(五):常用标准库sys和os
  13. 评微软裁员测试:自动化测试并不能代替人工
  14. SQLServer数据库日志处理
  15. Aircrack-ng套件_无线网卡破解
  16. 无线路由器连接有线路由器
  17. 【Mac】MAC 终端美化教程(来个全套)
  18. 量化投资和主观投资到底有什么区别?
  19. Spark Streaming与流处理
  20. 获取CheckedListBox选中的项

热门文章

  1. INT,INT32,_int64的范围
  2. html怎么调用node.js,javascript – 在HTML中使用Node.js模块
  3. 春季吃什么水果保养皮肤
  4. Linux下iconv乱码转码命令
  5. 欧姆龙CJ1W如何进行EIP通讯及常见错误处理
  6. 我个人的网站推广方法
  7. 不朽凡人 正文 第五百零一章 有些不同的颜野
  8. 【FFmpeg】转码、压制、录屏、裁切、合并、提取、直播...(ffmpeg笔记)
  9. 设计模式(三)结构型模式介绍及实例
  10. VUE手动实现手风琴折叠面板,不用组件