单单P 2018-03-16 01:38 采纳率: 50%
浏览 900
已结题

Mysql5.7.18 存储过程跨日处理 求助!

1、需求:(周四、周五)凌晨处理3天前数据,(周一、周二、周三)凌晨处理5天前数据,周六周日不处理;
2、请问如何修改下列存储过程?

 /* 
    Mysql5.7.18
 */

CREATE PROCEDURE increase_available()
p:
begin -- 开始存储过程  
declare current_product_code varchar(32); -- 产品代码  
declare current_userid INT(11); -- 用户ID  
declare current_verify_time INT(11); -- 审核时间
declare current_amount INT(11); -- 交易数量 
declare handle_day INT(11); -- 处理日
declare handle_day_before INT(11); -- 处理日(前一天)

-- 交易审核的起始时间:三天前
-- start_date = unix_timestamp(DATE_ADD(date(CURDATE()),INTERVAL -3 DAY));  
-- 交易审核的结束时间:二天前
-- end_date = unix_timestamp(DATE_ADD(date(CURDATE()),INTERVAL -2 DAY));

DECLARE done INT DEFAULT FALSE; -- 自定义控制游标循环,默认false  

-- 按T+3日处理,周六、周日不处理。
-- 当前周四处理周一的数据,
if DAYOFWEEK(CURDATE()) = 5 then 
    set @handle_day = 3, @handle_day_before = 2;
-- 当前周五处理周二的数据
elseif DAYOFWEEK(CURDATE()) = 6 then 
    set @handle_day = 3, @handle_day_before = 2;
-- 当前下周一处理上周三的数据
elseif DAYOFWEEK(CURDATE()) = 2 then 
    set @handle_day = 5, @handle_day_before = 4;
-- 当前下周二处理上周四的数据
elseif DAYOFWEEK(CURDATE()) = 3 then 
    set @handle_day = 5, @handle_day_before = 4;
-- 当前下周三处理上周五的数据
elseif DAYOFWEEK(CURDATE()) = 4 then 
    set @handle_day = 5, @handle_day_before = 4;
else 
    -- 周六、周日不处理,不执行存储过程
    LEAVE p;
end if;  

DECLARE My_Cursor CURSOR FOR ( SELECT product_code, userid, amount, verify_time FROM oa_option_transactions WHERE type= 1 and `status`=2 and verify_time >= unix_timestamp(DATE_ADD(date(CURDATE()),INTERVAL - @handle_day DAY)) and verify_time < unix_timestamp(DATE_ADD(date(CURDATE()),INTERVAL - @handle_day_before DAY)) ); -- 定义游标并输入结果集  
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 绑定控制到游标,游标循环结束自动转true  

OPEN My_Cursor; -- 打开游标  
  myLoop: LOOP -- 开始循环体,myLoop为自定义循环名,结束循环时用到  
    FETCH My_Cursor into current_product_code, current_userid, ,current_amount, current_verify_time; -- 将游标当前读取行的数据顺序赋予自定义 
    IF done THEN -- 判断是否继续循环  
      LEAVE myLoop; -- 结束循环  
    END IF;  
    -- 自己要做的事情,在 sql 中直接使用自定义即可  

        UPDATE oa_option_holdings SET available = available + current_amount WHERE product_code = current_product_code and user_id = current_userid; --   

    COMMIT; -- 提交事务  
  END LOOP myLoop; -- 结束自定义循环体  
  CLOSE My_Cursor; -- 关闭游标  
END
  • 写回答

2条回答 默认 最新

  • 思通数科x 思通数科官方帐号 2018-03-16 01:58
    关注

    这是一个存储过程的问题

    评论

报告相同问题?

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP