Oracle批量插入报错,ORA-01745: 无效的主机/绑定变量名

前言:最近工作中做定时任务同步数据的时候,遇到了上万条数据的批量插入,踩了个坑,这里我对于这个坑做个笔记,避免以后再犯!

目录

一、原因分析

二、解决方案

三、总结


一、原因分析

当我们使用MyBatis的批量插入时候,在控制台会发现有很多的问好,这些都是自定义的变量值,当变量值超过64K时,Oracle就会抛出异常,主要原因就是执行的SQL语句过长,大小和长度都超过了最大限制。

二、解决方案

首先用java代码实现基本的批量逻辑代码:

    public void insertBatch(List list){
        int batchNum = 100;
        int insertLength = list.size();
        int i = 0;
        while ( insertLength > batchNum ){
            relationMapper.insertUserBatch(list.subList(i,i+batchNum));
            i = i + batchNum;
            insertLength = insertLength - batchNum;
        }

        if(insertLength > 0 ){
            relationMapper.insertUserBatch(list.subList(i,i+insertLength));
        }
    }

Mybatis的xml文件代码:


        insert all
        
            into user
            
                username,
                password,
            
            
                #{item.username},
                #{item.password},
            
        
        select 1 from dual
    

拓展:

这是批量修改的xml文件写法


        
            update port_in_out_cy_relation
            
                username= #{item.username},
                password= #{item.password},
            
            where id = #{item.id}
        
    

三、总结

以上就是对于我对于这次实际开发中遇到所遇到的问题的解决方案,亲测可用,希望对各位有所帮助。

你可能感兴趣的:(SpringBoot,Oracle,MyBatis,java,oracle,sql,数据库,spring,boot)