`

mysql存储过程(获取每周周一并插入数据库中)

阅读更多
自己定义了一些自动邮件发送的信息。但是因为某一些原因。其应用部署在一台台式机上面,因为网络原因(大多数为网络)或是电源原因导致定时邮件没有发送成功。
那么必须自己从其他方面进行解决。
因为定时任务是按照时间来进行的,如果超过了这个时间点,下次发送只能等明天这个时间了。所以这样并不是特别合理的方式。
所以改进的方案为:
数据库存储任务字段日期和标志位,如果某天已完成则标志位为确认。
程序启动后,检测当前时间并核对数据库中此时间点及此时间点以前的时间点标志位是否为真。
如果不为真,则相应做业务操作,操作完成设置标志位为真。
对于每天都执行的任务来说是很简单的。
但是对于某些周期性的,比如每周周一执行。那么就需要在数据库中奖每周周一进行提取出来。
这里方案有两种,1,采用传统的java方法,获取每周周一的日期然后存储到数据库。这个方案简单,而且可以执行。2,采用数据库的存储过程。存储过程其实也是一个方法。只是其采用sql的预演。
我这里考虑采用第二种方法。
在进行过程中发现了一些坑。对于mysql存储过程方面用的很少。居然要设定结束符。(大家尽量多参考官方的手册,网络上的很多都不行能执行)
存储过程如下:
DELIMITER //
create or replace procedure looppc()
begin 
declare i int;
set i = 1;
repeat 
    insert into testrepeat(dd) select DATE_FORMAT(subdate(curdate(),date_format(curdate(),'%w')-i*7),'%Y-%m-%d');
    set i = i + 1;
until i >= 20
end repeat;
end
//

DELIMITER ;


第一行是要注意的。
然后执行call looppc();即可。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics