打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
MySQL数据篇(九)--存储过程实现定时每天清理过期数据

需求:有一个活动记录表 t_ad ,商家每次发起一个活动,就会在 t_shake_devices_relation 表里面生成一些关联记录。现在写一个存储过程实现,如果活动过期,就将关联表里面的数据标记删除。

1、代码如下:

BEGIN
    /*
        用途:每天23:00执行一次,处理“开屏广告”和“门店主页”关联设备信息,如果当前时间活动已过期,及将表下关联记录标记为已删除状态
    */
    
    #定义变量
    DECLARE done INT;#游标标记
    DECLARE timestampTmp INT;#当前时间戳
    DECLARE ad_id INT;#需要清除的广告活动id
    DECLARE ad_ad_type INT;#广告类型1
    DECLARE ad_ad_location INT;#广告类型2
    DECLARE devices_ad INT;#设备关联表需要清除的广告活动id
    DECLARE err INT; #是否有sql错误
    
    

    #创建游标,并且存储数据,获取未处理,已结束的广告活动id
    DECLARE cur_ad CURSOR
                    FOR
                    SELECT id,ad_type,ad_location FROM t_ad WHERE is_handle = 0 AND end_time < timestampTmp LIMIT 500;
    
    #游标中的内容执行完后将done设置为1
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    #检查sql是否有错
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET err=1; 

    #赋值当前时间
    SET timestampTmp = UNIX_TIMESTAMP();

    #打开游标
    OPEN cur_ad;

    #执行循环
    posLoop:LOOP
            
                #游标结束或者SQL错误,结束循环
                IF done = 1 or err = 1 THEN
                        LEAVE    posLoop;
                END IF;

                #取游标中的值
                FETCH    cur_ad INTO    ad_id,ad_ad_type,ad_ad_location;

                #查询数据,判断是否需要修改
                SELECT    COUNT(1) INTO    devices_ad FROM t_shake_devices_relation WHERE    relation_id = ad_id AND is_deleted = 0;
                
                #存在即修改
                IF devices_ad > 0 THEN
                        UPDATE t_shake_devices_relation SET is_deleted = 1 WHERE relation_id = ad_id;
                        
                        #修改成功后标记t_ad表为已处理
                        IF ROW_COUNT() > 0 THEN
                                UPDATE t_ad SET is_handle = 1 WHERE id = ad_id;
                        END IF;

                END IF;
    
    #结束循环
    END    LOOP posLoop;

    #释放游标
    CLOSE    cur_ad;
END

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
SQL Server 2008 存储过程示例
存储过程--创建视图, 游标的用法,sql 中 not in(...)查询条件的用法
mysql游标循环的使用
SQL 游标 定义在存储过程中
sql 基本游标
sql 优化之:实现小数据量和海量数据的通用分页显示存储过程(系列四)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服