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
    评论
MySQL中,可以使用游标来传递参数。引用中的示例演示了如何创建一个存储过程test_cursor,其中包含一个in参数param和一个out参数result,并使用游标cur_test来查询users数据表中的记录。 首先,我们创建了一个名为test_cursor的存储过程,其中定义了参数param和result,并声明了一些局部变量。然后,我们创建了一个名为cur_test的游标,用于查询users数据表中的user_name和user_pass字段。 在游标的定义中,我们还声明了一个continue handler,用于在没有更多行可供读取时设置done变量为1。 接下来,我们使用if语句来判断是否有传入的参数param。如果有参数传入,则通过查询users数据表中的相应记录将结果赋给result变量。否则,我们打开游标cur_test,并使用repeat循环通过游标逐行获取name和pass的值,并将结果与之前的结果使用concat_ws函数连接在一起。 最后,我们关闭游标cur_test,并结束存储过程。 要调用存储过程并传递参数,可以使用CALL语句,如引用中所示。在调用过程后,可以通过查询变量@test来获取存储过程返回的结果。 所以,使用游标MySQL中传递参数的方法是创建一个存储过程,声明游标和参数,并在存储过程中使用游标来处理数据。然后通过调用存储过程并传递参数来获取结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [MySQL(85)MySQL游标(Cursor)的定义及使用](https://blog.csdn.net/m0_54144956/article/details/131294159)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值