mysql 存储过程批量更新

最近做一个批量更新的操作,由于是临时需求,就想着在数据库直接操作,不在代码里动手了,结合网上的一些资料,做如下处理:

1.先建立一个临时表,导入需要变动的数据;

DROP TABLE IF EXISTS t_barcode;
CREATE TABLE `t_barcode` (
  `barCode` varchar(32) DEFAULT NULL,
  `quantity` double DEFAULT NULL COMMENT '修改数量'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Procedure structure for my_batch_update
-- ----------------------------

2.建立存储过程,从游标当中取临时表的数据,逐一调用更新的存储过程
DROP PROCEDURE IF EXISTS `my_batch_update`;
DELIMITER ;;
CREATE  PROCEDURE `my_batch_update`()
BEGIN
    DECLARE
        nodata INT DEFAULT 0 ; #注意:这个变量声明必须放在游标声明前面
    DECLARE
        barCode VARCHAR (20) ;
    DECLARE
        quantity DOUBLE ;
    DECLARE                       -- 1、定义一个游标mycursor
        mycursor CURSOR FOR 
        SELECT
          tb.barCode barCode,
          tb.quantity
         FROM
           t_barcode tb ;
    DECLARE EXIT HANDLER FOR NOT FOUND 
                    SET nodata = 1 ; -- 当读到数据的最后一条时,设置变量为1  DECLARE  CONTINUE HANDLER FOR NOTFOUND
    OPEN mycursor ;    -- 2、打开游标
            WHILE nodata = 0 DO     -- 3 判断是不是到了最后一条数据
                        -- 4、使用游标获取列的值
                        FETCH next FROM mycursor INTO barCode,quantity ; -- 4、显示结果
                        
            CALL my_batch_upadae_stock (barCode,quantity) ;
            END WHILE ; 
            -- 5、关闭游标
                        CLOSE mycursor ;
                        END
;;
DELIMITER ;

3.建立更新的存储过程

-- ----------------------------
-- Procedure structure for my_batch_upadae_stock
-- ----------------------------
DROP PROCEDURE IF EXISTS `my_batch_upadae_stock`;
DELIMITER ;;
CREATE PROCEDURE `my_batch_upadae_stock`(IN barCode VARCHAR(30),IN quantity DOUBLE)
BEGIN
UPDATE t_repertory_detail SET quantity = quantity WHERE bar_code =barCode;
UPDATE t_transitbox_last_record SET quantity=quantity WHERE bar_code =barCode;
 END
;;
DELIMITER ;

4.调用过程

CALL my_batch_update();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值