CREATE DEFINER=`oneboss1`@`192.168.%.%` PROCEDURE `increment_for_ali_ware`(IN `limitSize` INT)
begin
#声明一个标记,当游标状态为最后一条记录时,修改该变量
declare done int;
#本次处理成功同步(insert/update的商品数量)
DECLARE INSERT_WARE_COUNT INT;
DECLARE UPDATE_WARE_COUNT INT;
declare productName VARCHAR (300);
declare productUrl VARCHAR (300);
declare productImgUrl VARCHAR (300);
declare productCurrentPrice DOUBLE ;
declare productOnTime LONG ;
declare shopId VARCHAR (50);
declare productTbId VARCHAR (50);
declare offerStatus VARCHAR (50);
#用于保存循环采番所得到的ID值
DECLARE productDbId VARCHAR(50);
#定义游标
DECLARE WAIT_SYNC_DATA_CUR CURSOR FOR (SELECT t1.`subject`, t2.image_uri, t3.price, t1.FN_SHOP_ID, t1.gmt_create, t1.offer_status, t1.details_url, t1.offer_id FROM u_sync_albb_offer t1 LEFT JOIN ( SELECT image_uri, tt.offer_id FROM u_sync_albb_offer_image_info tt GROUP BY tt.offer_id ) t2 ON t1.offer_id = t2.offer_id LEFT JOIN ( SELECT price, ty.offer_id FROM U_SYNC_ALBB_OFFER_PRICE_RANGE_INFO ty GROUP BY ty.offer_id ) t3 ON t1.offer_id = t3.offer_id WHERE t1.SYNC_STATUS = 0 AND NOT EXISTS ( SELECT M.PRODUCT_ID FROM MK_COMMODITY_INFORMATION M WHERE M.SHOP_ID = t1.FN_SHOP_ID AND M.PRODUCT_TB_ID = t1.offer_id ) LIMIT 0,limitSize);
DECLARE WAIT_UPDATE_DATA_CUR CURSOR FOR (SELECT t1.`subject`, t2.image_uri, t3.price, t1.FN_SHOP_ID, t1.gmt_create, t1.offer_status, t1.details_url, t1.offer_id FROM u_sync_albb_offer t1 LEFT JOIN ( SELECT image_uri, tt.offer_id FROM u_sync_albb_offer_image_info tt GROUP BY tt.offer_id ) t2 ON t1.offer_id = t2.offer_id LEFT JOIN ( SELECT price, ty.offer_id FROM U_SYNC_ALBB_OFFER_PRICE_RANGE_INFO ty GROUP BY ty.offer_id ) t3 ON t1.offer_id = t3.offer_id WHERE t1.SYNC_STATUS = 0 AND EXISTS ( SELECT M.PRODUCT_ID FROM MK_COMMODITY_INFORMATION M WHERE M.SHOP_ID = t1.FN_SHOP_ID AND M.PRODUCT_TB_ID = t1.offer_id ) LIMIT 0,limitSize);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
#打开游标
OPEN WAIT_SYNC_DATA_CUR;
OPEN WAIT_UPDATE_DATA_CUR;
SET INSERT_WARE_COUNT=0;
SET UPDATE_WARE_COUNT=0;
#循环游标
cursor_loop1:LOOP
#把数据取出
FETCH WAIT_SYNC_DATA_CUR INTO productName,productImgUrl,productCurrentPrice,shopId,productOnTime,offerStatus,productUrl,productTbId; #读取数据到游标
IF done=1 THEN
LEAVE cursor_loop1;
END IF;
#CALL QUERY_MK_COMMODITY_INFORMATION_EXISTS_ID(shopId,productTbId,productId);
CALL NEXT_ID_4_PROCEDURE('CARD_PRO_CD',NULL,1,productDbId);
INSERT INTO mk_commodity_information( PRODUCT_ID, PRODUCT_NAME, PRODUCT_IMG_URL, PRODUCT_CURRENT_PRICE, SHOP_ID, PRODUCT_ON_TIME, PRODUCT_STATUS, PRODUCT_URL, PRODUCT_TB_ID, TWO_DIMENSION_CODE_STATUS ) VALUES(productDbId,productName,productImgUrl,productCurrentPrice,shopId,productOnTime,offerStatus,productUrl,productTbId,'0');
UPDATE u_sync_albb_offer SET SYNC_STATUS=1 WHERE offer_id=productTbId AND FN_SHOP_ID=shopId;
SET INSERT_WARE_COUNT = INSERT_WARE_COUNT+1;
END LOOP cursor_loop1;
CLOSE WAIT_SYNC_DATA_CUR;
SET done=0;
cursor_loop2:LOOP
#把数据取出
FETCH WAIT_UPDATE_DATA_CUR INTO productName,productImgUrl,productCurrentPrice,shopId,productOnTime,offerStatus,productUrl,productTbId; #读取数据到游标
IF done=1 THEN
LEAVE cursor_loop2;
END IF;
UPDATE mk_commodity_information SET PRODUCT_NAME = productName, PRODUCT_URL = productUrl, PRODUCT_IMG_URL = productImgUrl, PRODUCT_CURRENT_PRICE = productCurrentPrice, PRODUCT_STATUS = offerStatus, TWO_DIMENSION_CODE_STATUS = '0' WHERE PRODUCT_TB_ID=productTbId AND SHOP_ID=shopId;
UPDATE u_sync_albb_offer SET SYNC_STATUS=1 WHERE offer_id=productTbId AND FN_SHOP_ID=shopId;
SET UPDATE_WARE_COUNT = UPDATE_WARE_COUNT+1;
END LOOP cursor_loop2;
CLOSE WAIT_UPDATE_DATA_CUR;
SELECT INSERT_WARE_COUNT,UPDATE_WARE_COUNT;
END
相关推荐
### MySQL游标(循环操作) #### 一、游标简介 在MySQL中,游标是一种数据库对象,主要用于处理存储过程中的结果集。游标允许我们逐行地读取查询结果,这对于需要对每一行数据执行特定操作的情况非常有用。通过...
MySQL游标是数据库管理系统中一个重要的概念,它在处理大量数据时非常有用,尤其是在需要逐行处理查询结果的情况下。游标允许程序动态地访问和操作数据集,而不是一次性加载所有结果。在MySQL中,游标主要用于存储...
MySQL游标是数据库管理系统中用于遍历查询结果集的一种机制,尤其在处理大量数据或进行迭代操作时,游标显得尤为重要。这篇博文可能是探讨如何在MySQL中使用游标,特别是当游标执行到最后一行后如何正确地结束循环。...
MySQL 游标详解 MySQL 从 5.0 版本开始支持存储过程和触发器,而游标在递归树结构中非常有用。游标是 MySQL 中的一种机制,允许开发人员在存储过程和触发器中控制数据的获取和处理。 在 MySQL 中,游标是通过 ...
[mysql游标的用法及作用] 例子: 当前有三张表A、B、C其中A和B是一对多关系,B和C是一对多关系,现在需要将B中A表的主键存到C中; 常规思路就是将B中查询出来然后通过一个update语句来更新C表就可以了,但是B表中有...
根据提供的文件信息,本文将详细解释一个MySQL存储过程的例子,其中包含了游标的使用。这个存储过程主要用于处理一批数据,涉及到日期范围内的数据处理、异常处理等。下面将逐一解析存储过程中涉及的重要知识点。 #...
MySQL游标是数据库管理系统中的一个重要概念,主要用于在存储过程或函数中逐行处理查询结果集。游标允许程序按需一次处理一行数据,而非一次性获取所有数据,这在处理大量数据时尤其有用,因为它可以避免一次性加载...
MySQL 游标嵌套实践 本文档旨在介绍 MySQL 游标嵌套的概念和实践,通过对游标的嵌套使用,演示如何实现复杂的数据操作。 一、游标嵌套简介 游标(Cursor)是数据库中的一种控制结构,可以用来遍历查询结果集。...
### MySQL 游标详解:数据库操作的精准定位器 #### MySQL 概览 MySQL 是一个广泛应用的开源关系型数据库管理系统(RDBMS),是LAMP技术栈的重要组成部分,该技术栈包括Linux操作系统、Apache Web服务器、MySQL...
### MySQL 游标在批量更新和删除中的应用详解 #### 一、MySQL 游标概述 游标(Cursor)在数据库领域中是一个重要的概念,它主要用于处理查询结果集中的每一行记录,允许开发者以逐行的方式对数据进行访问和操作。...
本文实例讲述了MySQL游标概念与用法。分享给大家供大家参考,具体如下: 1、游标的概念(Cursor) 一条sql,对应N条资源,取出资源的接口,就是游标,沿着游标,可以一次取出1行。如果开发过安卓的同学应该知道有一...
本文实例讲述了mysql游标的原理与用法。分享给大家供大家参考,具体如下: 本文内容: 什么是游标 创建游标 使用游标 首发日期:2018-04-18 什么是游标: 如果你前面看过mysql函数,会发现无法使用返回多行...
在MySQL当中的游标其实和java中的iterator迭代器这种类型类似,都是一个集合,然后通过循环遍历,游标现在是用来处理结果集的,首先要设置一个游标的结束
以上就是MySQL游标的定义、使用和关闭的基本概念以及如何处理游标循环的细节。理解这些概念对于编写涉及复杂数据处理的存储过程至关重要。记住,游标虽然提供了逐行处理数据的能力,但也需要注意性能影响,因为它们...