mysql自定义函数详解_mysql自定义函数详解

mysql自定义函数详解_mysql自定义函数详解需求:对于数据库中的记录,如果有两条连续的数据的value字段的值相同,则发邮件通知相关人员。需求分析:告警系统里面的告警检查是通过SQL来进行的,一般的SQL实现不了此功能,因此,这里可以通过函数的方式来实现。具体实现如下:1、数据表准备:tb_config_record。新建数据表脚本如下:createtabletb_config_record(idint,statusvarch…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

40417215954895d792098d316961e212.png

删除id=7的记录后,重新执行函数

cd1598a36649bbabf2316b429c6b4d64.png

总结:

函数按照预期的方式运行,得到正确的结果。具体操作过程中遇见以下困难:

1、函数编写时,每行都要顶格写,不然就会出现如下错误

6f4a15cd1407bad6dccf917a623287e8.png

运行错误:

b7001ea5c6d7a63999a92f209db0b7a9.png

2、需要在函数语句中添加语句:declare exit handler for not found  return result;

否则出现如下错误:

52b29197313bb6bb53ac4980c59bd41d.png

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196090.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dump文件分析工具有哪些_如何解析xml文件

    dump文件分析工具有哪些_如何解析xml文件/前言/在讲解Mat工具之前我们先来看下几个关于Dump/文件的问题Dump文件是什么Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中我们拿到Dump文件有什么用的?假如JVM因为内存溢出的原因宕机了,而程序的日志里面并没有关于溢出所在对象的信息,此时我们就需要通过分析Dump文件来找到问题原因Dump文件怎么生成?第一种在启动JVM时指定参数 #指定生成Dump文件的异常类型 -XX:+HeapDumpOnOutOf

    2022年10月2日
  • 在小程序/mpvue中使用flyio发起网络请求「建议收藏」

    在小程序/mpvue中使用flyio发起网络请求「建议收藏」Fly.js一个基于Promise的、强大的、支持多种JavaScript运行时的http请求库.有了它,您可以使用一份http请求代码在浏览器、微信小程序、Weex、Node、ReactNative、快应用中都能正常运行。同时可以方便配合主流前端框架,最大可能的实现WriteOnceRunEverywhere。上一篇文章介绍了在快应用中使用flyio,本文主要介绍一下如何在…

    2022年9月7日
  • winhex 数据恢复_win10文件恢复软件

    winhex 数据恢复_win10文件恢复软件数据恢复分类:硬恢复和软恢复。所谓硬恢复就是硬盘出现物理性损伤,比如有盘体坏道、电路板芯片烧毁、盘体异响,等故障,由此所导致的普通用户不容易取出里面数据,那么我们将它修好,同时又保留里面的数据或后来恢

    2022年8月5日
  • 空间回归与地理加权_地理加权显著性

    空间回归与地理加权_地理加权显著性本来这一章准备直接写(照抄)ArcGIS的帮助文档,写地理加权回归工具的使用……,然后就直接结束地理加权回归的,但是近来收到不少同学的邮件,很多都是掉在了当年虾神挖出的大坑里面,比如写了方法,没有列出公式,又比如写了公式木有推导过程(……作为高数战五渣的虾神,推导这种事,他认识我,我不认识他……)所以这次写GWR的时候,尽量少挖点坑,把该写的东西都写完,一者为了以后路过的同学少掉点坑,二者

    2022年10月7日
  • Matlab更改计算机用户名[通俗易懂]

    Matlab更改计算机用户名[通俗易懂]Matlab更改计算机用户名Matlab在安装的时候需要填写本地计算机的用户名,会和它的激活Licence绑定,我使用的是校园版。如果安装好之后更改了自己的计算机用户名,通常是Administrator;就会导致Matlab打开报错,可以通过重新进行激活的方式来更改之前的用户名1、找到Matlab的安装路径;然后bin目录;然后winXX(XX代表计算机位数);然后找到下面的active_matlab执行这个程序,后面就按照提示就可以了(比如我的路径:E:\MATLAB\bin\win64\

    2022年10月14日
  • Cubieboard 架设Git服务器

    Cubieboard 架设Git服务器如果你现在用的是Cubieboard或者树莓派卡片式电脑,可以查看本文之前,学习前面的四个教程,它可能会对你非常有帮助。如果你是普通的Linux用户或者LinuxVPS、Linux独立服务器等,可以直接跳过查看本文。教程一Cubieboard安装Linux系统教程二CubieboardLinux服务器配置教程三CubieboardLinux服务器安装L…

    2022年7月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号