MySQL游标可以退后_mysql游标最后一行重复问题

就是根据值的标签值,作为下一阶段是否插入的标示

BEGIN

declare v_user_Id bigint(20);

declare v_order_Id bigint(20);

declare v_ref_t int(11);

declare v_ref_c varchar(64);

declare v_entry_ref_p int(11);

declare v_entry_ref_b int(11);

declare v_entry_ref_pos int(11);

declare v_entry_ref_path varchar(128);

declare no_more_data int default 0;

declare v_tmp_date timestamp;

declare v_tmp_hour int(11);

declare v_trans_hour int(11);

-- 订单生成时间

declare v_create_time timestamp;

-- 检索开始时间,默认是从当天的0时

declare v_start_time timestamp;

-- 检索结束时间,默认是当天的24:00时

declare v_end_time timestamp;

-- 检索结束时间,默认是当天的24:00时

declare v_transfer_time timestamp;

-- 时间段

declare v_hourtime int(11);

declare v_hour int(11);

declare v_count int(11);

declare v_count2 int(11);

declare entrynumbers cursor  for  SELECT user_id,order_id,ref_t,ref_c,entry_ref_p,entry_ref_b,entry_ref_pos,entry_ref_path,create_time FROM bi_wbt.wbt_rpt_output   where create_time >= v_start_time and create_time <= v_end_time  ;

-- 设置一个终止标记

declare continue handler for not found set no_more_data=1;

-- 获取参数时间,精确到某日

set v_tmp_date=DATE_FORMAT(CURDATE(),'%Y-%m-%d');

-- 遍历某日下该时间点之前24小时内的数据

set v_tmp_hour=hour(CURTIME());

set v_trans_hour=v_tmp_hour-24;

set v_end_time=DATE_ADD(v_tmp_date, INTERVAL v_tmp_hour hour);

set v_start_time=DATE_ADD(v_end_time, INTERVAL -24 hour);

-- select v_start_time as 开始时间,v_end_time as 结束时间 , v_tmp_hour as 几时;

SELECT count(*) FROM bi_wbt.wbt_rpt_output   where create_time >= v_start_time and create_time <= v_end_time  into v_count;

-- 判断元数据产出表该时间端有内容 , 无内容无需同步

if(v_count<>0)

then

-- 判断是否有必要24小时全量同步

SELECT count(*) FROM dw_wbt.wbt_order_output_detail   where create_time >= v_start_time and create_time <= v_end_time  into v_count2;

if(v_count2=0)

then

set no_more_data=0;

-- 打开游标

open entrynumbers;

-- 循环所有的行

repeat

fetch entrynumbers into v_user_Id,v_order_Id,v_ref_t,v_ref_c,v_entry_ref_p,v_entry_ref_b,v_entry_ref_pos,v_entry_ref_path,v_create_time;

if(no_more_data=0) THEN

insert into dw_wbt.wbt_order_output_detail (user_id,order_id,ref_t,ref_c,entry_ref_p,entry_ref_b,entry_ref_pos,entry_ref_path,create_time ) values(v_user_Id,v_order_Id,v_ref_t,v_ref_c,v_entry_ref_p,v_entry_ref_b,v_entry_ref_pos,v_entry_ref_path,v_create_time);

END IF;

until no_more_data=1

end repeat;

-- 关闭游标

close entrynumbers;

-- 还要需判断之前时间跟该时间之内超过24小时

else

select create_time from dw_wbt.wbt_order_output_detail  where id =(select max(id) from dw_wbt.wbt_order_output_detail) into v_transfer_time;

set v_start_time=DATE_ADD(v_transfer_time, INTERVAL 1 hour);

set v_hour=hour(timediff(v_end_time,v_start_time));

-- 判断超过24小时的,不需要更新

if(v_hour>24)

then

set v_hour=v_hour-24;

set v_start_time=DATE_ADD(v_transfer_time, INTERVAL v_hour hour);

end if;

SELECT count(*) FROM bi_wbt.wbt_rpt_output   where create_time >= v_start_time and create_time <= v_end_time  into v_count2;

if(v_count2<>0)

then

set no_more_data=0;

-- 打开游标

open entrynumbers;

-- 循环所有的行

repeat

fetch entrynumbers into v_user_Id,v_order_Id,v_ref_t,v_ref_c,v_entry_ref_p,v_entry_ref_b,v_entry_ref_pos,v_entry_ref_path,v_create_time;

if(no_more_data=0) THEN

insert into dw_wbt.wbt_order_output_detail (user_id,order_id,ref_t,ref_c,entry_ref_p,entry_ref_b,entry_ref_pos,entry_ref_path,create_time ) values(v_user_Id,v_order_Id,v_ref_t,v_ref_c,v_entry_ref_p,v_entry_ref_b,v_entry_ref_pos,v_entry_ref_path,v_create_time);

END IF;

until no_more_data=1

end repeat;

-- 关闭游标

close entrynumbers;

end if;

end if;

end if;

END

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2012-08-20 16:14

浏览 2770

分类:数据库

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值