MySQL数据篇(九)-[通俗易懂]

MySQL数据篇(九)-[通俗易懂]需求:有一个活动记录表 t_ad ,商家每次发起一个活动,就会在 t_shake_devices_relation 表里面生成一些关联记录。现在写一个存储过程实现,如果活动过期,就将关联表里

需求:有一个活动记录表 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

代码100分

 

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

(0)
上一篇 2022-12-19
下一篇 2022-12-20

相关推荐

发表回复

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