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
public void testSimpleImportBuilder(){ DB2ESImportBuilder importBuilder = DB2ESImportBuilder.newInstance(); try { //清除测试表数据 ElasticSearchHelper.getRestClientUtil().dropIndice("dbclobdemo"); } catch (Exception e){ } //数据源相关配置,可选项,可以在外部启动数据源 importBuilder.setDbName("test") .setDbDriver("com.mysql.jdbc.Driver") //数据库驱动程序,必须导入相关数据库的驱动jar包 .setDbUrl("jdbc:mysql://localhost:3306/bboss?useCursorFetch=true") //通过useCursorFetch=true启用mysql游标fetch机制,否则会有严重的性能隐患,useCursorFetch必须和jdbcFetchSize参数配合使用,否则不会生效 .setDbUser("root") .setDbPassword("123456") .setValidateSQL("select 1") .setUsePool(false);//是否使用连接池 //指定导入数据的sql语句,必填项,可以设置自己的提取逻辑 importBuilder.setSql("select * from td_cms_document"); /** * es相关配置 */ importBuilder .setIndex("dbclobdemo") //必填项 .setIndexType("dbclobdemo") //必填项 .setRefreshOption(null)//可选项,null表示不实时刷新,importBuilder.setRefreshOption("refresh");表示实时刷新 .setUseJavaName(true) //可选项,将数据库字段名称转换为java驼峰规范的名称,例如:doc_id -> docId .setBatchSize(5000) //可选项,批量导入es的记录数,默认为-1,逐条处理,> 0时批量处理 .setJdbcFetchSize(10000);//设置数据库的查询fetchsize,同时在mysql url上设置useCursorFetch=true启用mysql游标fetch机制,否则会有严重的性能隐患,jdbcFetchSize必须和useCursorFetch参数配合使用,否则不会生效 /** * 执行数据库表数据导入es操作 */ DataStream dataStream = importBuilder.builder(); dataStream.execute(); }
07-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值