欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL自定义函数编写

程序员文章站 2022-03-10 12:57:36
...

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

 
MySQL自定义函数编写
            
    
    博客分类: mysql
 

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


MySQL自定义函数编写
            
    
    博客分类: mysql
 

总结:

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

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

     

MySQL自定义函数编写
            
    
    博客分类: mysql
 运行错误:


MySQL自定义函数编写
            
    
    博客分类: mysql

 

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

    否则出现如下错误:

 
 
MySQL自定义函数编写
            
    
    博客分类: mysql
 
 

 

 

 

 

 

  • MySQL自定义函数编写
            
    
    博客分类: mysql
  • 大小: 12.4 KB
  • MySQL自定义函数编写
            
    
    博客分类: mysql
  • 大小: 103.1 KB
  • MySQL自定义函数编写
            
    
    博客分类: mysql
  • 大小: 4.6 KB
  • MySQL自定义函数编写
            
    
    博客分类: mysql
  • 大小: 61.5 KB
  • MySQL自定义函数编写
            
    
    博客分类: mysql
  • 大小: 10.4 KB