当前位置:首页 > 开发 > 数据库 > 正文

mysql游标最后一行重复问题

发表于: 2012-08-20   作者:cywhoyi   来源:转载   浏览次数:
摘要: 就是根据值的标签值,作为下一阶段是否插入的标示 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); declar

就是根据值的标签值,作为下一阶段是否插入的标示
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

mysql游标最后一行重复问题

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
原文: Mysql高级之游标 什么是游标?select 语句也许一次性会取出来n条语句,那么游标便可以一次取出
表结构: 表数据: 期望结果: 虽然这种结果可以通过MySQL中的GROUP_CONCAT函数实现,但是此函数有
最近在使用Mysql时,经常需要用到游标,所以将使用方法做下记录以备日后查看。(这里只是为了说明游
http://blog.csdn.net/rebel_321/article/details/4927464 用ifstream的eof(),竟然读到文件最后了
建表时遇到遇到属性名同MySQL的保留字相同导致不能建表的问题,如下SQL语句: CREATE TABLE TBL_ACC
1、游标的作用及属性 游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作;
概述 游标是邪恶的! 在关系数据库中,我们对于查询的思考是面向集合的。而游标打破了这一规则,游
概述 游标是邪恶的! 在关系数据库中,我们对于查询的思考是面向集合的。而游标打破了这一规则,游
9 游标
oracle221 游标 游标的简介: 逐行处理查询结果,以编程的方式访问数据 游标的类型: 1,隐式游标:
10 游标
给你一个例子 和说明 我看来几遍就学会游标了 下面是例子 ---------------------------------------
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号