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;
否则出现如下错误:
下一篇: web前端是什么
推荐阅读
-
编写一个函数reverse_string(char * string)(递归实现)实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数
-
在服务器的mysql中创建自定义函数出错
-
mysql函数无法使用
-
php中生成随机密码的自定义函数代码
-
MySQL之函数
-
javascript提取URL的搜索字符串中的参数(自定义函数实现)_javascript技巧
-
mysql ceil() /ceiling()函数实例
-
MySql中DATEDIFF函数和TIMESTAMPDIFF时间函数_MySQL
-
自定义函数参数是数组,该怎么解决
-
Zend studio for eclipse中使php可以调用mysql相关函数的设置方_PHP