mysql 使用 游标进行批量刷新

drop procedure if exists UpdateUserOrg; 
CREATE PROCEDURE UpdateUserOrg()  
BEGIN  
    -- 创建接收游标数据的变量  
    declare v_lob_number varchar(20);
    declare v_lob_group varchar(20);
    declare v_lob varchar(20);
    declare v_budu varchar(20);
    declare v_dd varchar(20);
  --
 
    declare total int default 0;     -- 创建总数变量  
 
    declare done int default false;     -- 创建结束标志变量  

    -- 创建游标  
    declare cur cursor for select lob_number,lob_group,lob,budu,dd from OA_org_update_info;  
   


 
    declare continue HANDLER for not found set done = true;     -- 指定游标循环结束时的返回值 
   
    set total = 0;    -- 设置初始值 
    
    open cur;    -- 打开游标
   
    read_loop:loop    -- 开始循环游标里的数据 
   
    fetch cur into v_lob_number,v_lob_group,v_lob,v_budu,v_dd;   -- 根据游标当前指向的一条数据  
 
    if done then     -- 判断游标的循环是否结束  
        leave read_loop;     -- 跳出游标循环  
    end if;  
    -- 获取一条数据时,将count值进行累加操作,这里可以做任意你想做的操作,
    IF v_dd is not null and v_dd!=''        //dd交付部设置
    THEN  
        UPDATE `USER` SET dept_id =ifnull((  //根据交付部
      SELECT dept_id FROM DEPARTMENT
      WHERE dept_parent IN (
    SELECT dept_id FROM DEPARTMENT WHERE dept_name LIKE CONCAT("%",ifnull(v_budu,''),"%"))
      AND dept_name LIKE CONCAT("%",ifnull(v_dd,''),"%")
       ),0)
       WHERE
      remark=v_lob_number;  
  
    ELSEIF v_budu is not null and v_budu!=''  //budu事业部设置
    THEN  
        UPDATE `USER` SET dept_id = ifnull((
      SELECT dept_id FROM DEPARTMENT
      WHERE dept_parent IN (
    SELECT dept_id FROM DEPARTMENT WHERE dept_name LIKE CONCAT("%",ifnull(v_lob,''),"%"))
      AND dept_name LIKE CONCAT("%",ifnull(v_budu,''),"%")
       ),0)
       WHERE
      remark=v_lob_number;   
  
    ELSEIF v_lob is not null and v_lob!='' //lob业务线设置
    THEN  
        UPDATE `USER` SET dept_id = ifnull((
      SELECT dept_id FROM DEPARTMENT
      WHERE dept_parent IN (
    SELECT dept_id FROM DEPARTMENT WHERE dept_name LIKE CONCAT("%",ifnull(v_lob_group,''),"%"))
      AND dept_name LIKE CONCAT("%",ifnull(v_lob,''),"%")
       ),0)
       WHERE
      remark=v_lob_number; 
  
    ELSE                                   //lob_group业务群设置
       UPDATE `USER` SET dept_id = ifnull((   
      SELECT dept_id FROM DEPARTMENT
      WHERE  dept_name LIKE CONCAT("%",ifnull(v_lob_group,''),"%")
       ),0)
       WHERE
      remark=v_lob_number; 


    END IF;
    set total = total + 1;  -- 结束游标循环 
     
    end loop;  -- 关闭游标 
     
    close cur;  
   -- 输出不成功结果,分析为什么DEPT_ID为0,一般为OA_org_update_info部门信息有误 
  select lob_number,lob_group,lob,budu,dd from OA_org_update_info where lob_number in (
     select user_id from USER where substr(USER_id,2,length(user_id)-1) in (
        select lob_number from OA_org_update_info
     )
        and dept_id='0'
  );


  select total;
END;
call UpdateUserOrg();
drop procedure UpdateUserOrg
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值