MYSQL 游标使用.避免插入duplicate 重复数据

CREATE DEFINER=`root`@`%` PROCEDURE `Process_Over_Days_Orders`()
BEGIN
	#Routine body goes here...
	BEGIN
		DROP TABLE IF EXISTS test_table;
		CREATE  TEMPORARY TABLE IF NOT EXISTS test_table( `order_no` varchar(30));

		Insert into test_table
		Select order_no from order_status
		where 
			TIMESTAMPDIFF(DAY, order_time, modified ) >= 90
			and order_status = '10'
-- 			and order_no Not in (
-- 				 Select order_no from TMP_Over_90_days_order
-- 			)
		limit 1;
	END;
	
	BEGIN
	
		DECLARE cid BIGINT;
		DECLARE vDone INT;
		DECLARE cur CURSOR for 	
			  Select order_no as cid from  test_table;
		DECLARE CONTINUE HANDLER for not FOUND set vDone=1;
		
-- 		open cur;		
-- 				posLoop:LOOP
-- 					IF done=1 THEN
-- 							LEAVE posLoop; 						
-- 					END IF;	
 ## 错误写法, 或造成最后一条数据, 重复插入2次	
-- 					
-- 					FETCH cur INTO cid;				
-- 					Insert into TMP_Over_90_days_order (order_no) Values (cid);	
-- 				
-- 				END LOOP posLoop;
-- 				
-- 		CLOSE cur;
-- 	
	
-- ok		
		open cur;		
				posLoop:LOOP
					FETCH cur INTO cid;		
							
					IF vDone=1 THEN
							LEAVE posLoop;
					ELSE 					
						Insert into TMP_Over_90_days_order (order_no) Values (cid);		
					END IF;		
				END LOOP posLoop;
				
		CLOSE cur;
-- ok
		open cur;		
				posLoop:LOOP
				
        FETCH cur INTO cid;				
					IF vDone=1 THEN
							LEAVE posLoop;				
					END IF;					
					Insert into TMP_Over_90_days_order (order_no) Values (cid);	
				
				END LOOP posLoop;
				
		CLOSE cur;
		
   END;
	 
	 

	
	


END

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值