MySQL存储过程遍历游标用loop嵌套循环的例子

CREATE DEFINER=`root`@`%` PROCEDURE `procInitData`(IN sId1 INT,IN sId2 INT,IN sId3 INT,IN sId4 INT,IN sId5 INT,IN sId6 INT,IN sId7 INT,IN sId8 INT,IN sId9 INT,IN sId10 INT,IN pName VARCHAR(50))
BEGIN 
        ##传参例子:376,0,0,0,0,0,0,0,0,0,'肩并肩',sId为参加活动的店铺Id,pName为活动名称,
        ##sId没有则写0,一次最多传10个店铺id
        ##店铺ID
        DECLARE shopId INT DEFAULT 0;
        ##店铺名称
        DECLARE shopName varchar(64);
        ##活动ID
        DECLARE promotionId INT DEFAULT 0;
        ##店铺活动ID
        DECLARE shopPromotionId INT DEFAULT 0;
        ##活动名称
        DECLARE promotionName varchar(64);
        ##商品ID
        DECLARE commodityId INT DEFAULT 0;
        ##商品详情图片
        DECLARE imagePath varchar(128);
        ##BANNER图片1的路径
        DECLARE bannerImagePathOne varchar(128);
        ##BANNER图片2的路径
        DECLARE bannerImagePathTwo varchar(128);
        ##BANNER图片3的路径
        DECLARE bannerImagePathThree varchar(128);
        ##BANNER图片4的路径
        DECLARE bannerImagePathFour varchar(128);
        ##BANNER图片5的路径
        DECLARE bannerImagePathFive varchar(128);
        ##BANNER图片6的路径
        DECLARE bannerImagePathSix varchar(128);
        ##商品名称
        DECLARE commodityName varchar(64);
        ##商品价格
        DECLARE commodityPrice INT DEFAULT 0;
        ##商品原价
        DECLARE originalPrice INT DEFAULT 0;
        ##商品类型 1:平台活动商品,2:店铺活动商品,3:店铺商品(无活动,拓展字段)
        DECLARE commodityType varchar(64);
        ##商品状态 1:上架 2:下架
        DECLARE commodityState varchar(64);
        ##商品描述
        DECLARE commodityDesc varchar(64);
        ##是否可用抵扣券
        DECLARE couponFlag varchar(64);
        ##员工获得分润比例
        DECLARE gainRate varchar(64);

        

        #------------------------------------------
    DECLARE done INT DEFAULT FALSE;
    #变量输出结果
    DECLARE `result` varchar(2000);
        
    #定义一个接收结果集的游标查店铺 
    DECLARE cur_new CURSOR FOR select SHOP_ID,SHOP_NAME from t_shop where SHOP_ID in (sId1,sId2,sId3,sId4,sId5,sId6,sId7,sId8,sId9,sId10);

        #定义一个接收结果集的游标查平台商品,商品状态要已上架 
    DECLARE cur_new_two CURSOR FOR SELECT COMMODITY_ID,COMMODITY_NAME,COMMODITY_PRICE,ORIGINAL_PRICE,
        COMMODITY_TYPE,COMMODITY_STATE,COMMODITY_DESC,COUPON_FLAG,IMAGE_PATH,BANNER_IMAGE_PATH_ONE,BANNER_IMAGE_PATH_TWO,
        BANNER_IMAGE_PATH_THREE,BANNER_IMAGE_PATH_FOUR,BANNER_IMAGE_PATH_FIVE,BANNER_IMAGE_PATH_SIX,GAIN_RATE 
        from t_commodity where SHOP_ID=0 and COMMODITY_STATE='1';

        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

        #店铺参与的活动 pName COLLATE utf8_unicode_ci,把pName转成COLLATE utf8_unicode_ci格式因为数据库是该格式
        select PROMOTION_ID,PROMOTION_NAME INTO @promotionIds,@promotionNames FROM t_promotion where PROMOTION_NAME COLLATE utf8mb4_unicode_ci = pName;

    

    #打开游标
    OPEN  cur_new;
    #遍历店游标
    read_loop: LOOP
    #把参数赋给变量shopId,shopName
    FETCH  NEXT from cur_new INTO shopId,shopName;

    IF done THEN
    LEAVE read_loop;
    END IF;

        ##增加活动-店铺之间的关系
        INSERT INTO `t_pool_shop_promotion` VALUES (NULL,@promotionIds,@promotionNames , shopId, shopName, 
        '','','0','0','0','0','0','0',
        (SELECT DATE_ADD(current_date,INTERVAL 30 DAY)),NOW(),(SELECT DATE_ADD(current_date,INTERVAL 12 MONTH)),NOW(),NOW());

        ##查询店铺与活动之间的关系##活动结束时间要大于当前时间
        select SHOP_PROMOTION_ID,PROMOTION_NAME INTO shopPromotionId,promotionName FROM t_pool_shop_promotion where SHOP_ID =shopId and PROMOTION_ID=@promotionId and PROMOTION_END_TIME >NOW();

                SET done=0;
                ##平台商品游标-----------------开始---------------------------------------------------
        OPEN  cur_new_two;
        ##遍历游标(内循环)
                inner_loop:LOOP

                #把参数赋给变量
                FETCH  NEXT from cur_new_two INTO commodityId,commodityName,commodityPrice,originalPrice,commodityType,commodityState,commodityDesc,
                couponFlag,imagePath,bannerImagePathOne,bannerImagePathTwo,bannerImagePathThree,bannerImagePathFour,bannerImagePathFive,bannerImagePathSix,gainRate;                                

                IF done THEN
                LEAVE inner_loop;
                END IF;
                
                set @result2 = '生成店铺活动商品!' ;
                ##生成店铺活动商品,shopPromotionId与promotionName另外设置
                INSERT INTO `t_commodity` VALUES (NULL, shopId , shopPromotionId , promotionName, commodityName ,commodityPrice, originalPrice, NULL, '2', '1', commodityDesc,couponFlag, 
                imagePath, bannerImagePathOne,bannerImagePathTwo,bannerImagePathThree, bannerImagePathFour, bannerImagePathFive, bannerImagePathSix,gainRate,'0','0','0');
                
                END LOOP inner_loop;
                ##平台商品游标------------------结束---------------------------------------------------------------

                ##关闭商品游标
                CLOSE cur_new_two;

    SET done=0;
    END LOOP;
        set @result = '处理成功!';
    #关闭店铺游标
    CLOSE cur_new;
        #输出结果
    select @result;
        select @result2;
END

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值