`

mysql 游标

阅读更多

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游标是数据库管理系统中用于遍历查询结果集的一种机制,尤其在处理大量数据或进行迭代操作时,游标显得尤为重要。这篇博文可能是探讨如何在MySQL中使用游标,特别是当游标执行到最后一行后如何正确地结束循环。...

    mysql游标详解

    MySQL 游标详解 MySQL 从 5.0 版本开始支持存储过程和触发器,而游标在递归树结构中非常有用。游标是 MySQL 中的一种机制,允许开发人员在存储过程和触发器中控制数据的获取和处理。 在 MySQL 中,游标是通过 ...

    详解Mysql 游标的用法及其作用

    [mysql游标的用法及作用] 例子: 当前有三张表A、B、C其中A和B是一对多关系,B和C是一对多关系,现在需要将B中A表的主键存到C中; 常规思路就是将B中查询出来然后通过一个update语句来更新C表就可以了,但是B表中有...

    mysql游标存储过程例子

    根据提供的文件信息,本文将详细解释一个MySQL存储过程的例子,其中包含了游标的使用。这个存储过程主要用于处理一批数据,涉及到日期范围内的数据处理、异常处理等。下面将逐一解析存储过程中涉及的重要知识点。 #...

    MySql游标的使用实例

    MySQL游标是数据库管理系统中的一个重要概念,主要用于在存储过程或函数中逐行处理查询结果集。游标允许程序按需一次处理一行数据,而非一次性获取所有数据,这在处理大量数据时尤其有用,因为它可以避免一次性加载...

    mysql游标嵌套[文].pdf

    MySQL 游标嵌套实践 本文档旨在介绍 MySQL 游标嵌套的概念和实践,通过对游标的嵌套使用,演示如何实现复杂的数据操作。 一、游标嵌套简介 游标(Cursor)是数据库中的一种控制结构,可以用来遍历查询结果集。...

    MySQL游标:数据库操作的精准定位器

    ### MySQL 游标详解:数据库操作的精准定位器 #### MySQL 概览 MySQL 是一个广泛应用的开源关系型数据库管理系统(RDBMS),是LAMP技术栈的重要组成部分,该技术栈包括Linux操作系统、Apache Web服务器、MySQL...

    精准掌控数据流:MySQL游标在批量更新和删除中的应用

    ### MySQL 游标在批量更新和删除中的应用详解 #### 一、MySQL 游标概述 游标(Cursor)在数据库领域中是一个重要的概念,它主要用于处理查询结果集中的每一行记录,允许开发者以逐行的方式对数据进行访问和操作。...

    MySQL游标概念与用法详解

    本文实例讲述了MySQL游标概念与用法。分享给大家供大家参考,具体如下: 1、游标的概念(Cursor) 一条sql,对应N条资源,取出资源的接口,就是游标,沿着游标,可以一次取出1行。如果开发过安卓的同学应该知道有一...

    mysql游标的原理与用法实例分析

    本文实例讲述了mysql游标的原理与用法。分享给大家供大家参考,具体如下: 本文内容: 什么是游标 创建游标 使用游标 首发日期:2018-04-18 什么是游标: 如果你前面看过mysql函数,会发现无法使用返回多行...

    seliencepuppet#mysql#20.mysql游标的创建1

    在MySQL当中的游标其实和java中的iterator迭代器这种类型类似,都是一个集合,然后通过循环遍历,游标现在是用来处理结果集的,首先要设置一个游标的结束

    Mysql的游标的定义使用及关闭深入分析

    以上就是MySQL游标的定义、使用和关闭的基本概念以及如何处理游标循环的细节。理解这些概念对于编写涉及复杂数据处理的存储过程至关重要。记住,游标虽然提供了逐行处理数据的能力,但也需要注意性能影响,因为它们...

Global site tag (gtag.js) - Google Analytics