【oracle】【excel导入】ORA-01000: 超出打开游标的最大数

报错信息 

2021-04-13 14:48:06,154 ERROR (ExceptionHandler.java:49) - An error occurred in com.bosssoft.helpPool.controller.backend.CapitalController#readImpFile

org.apache.ibatis.exceptions.PersistenceException:

### Error committing transaction.  Cause: org.apache.ibatis.executor.BatchExecutorException: com.bosssoft.helpPool.mapper.CapitalMapper.saveCapital (batch index #298) failed. 297 prior sub executor(s) completed successfully, but will be rolled back. Cause: java.sql.BatchUpdateException: ORA-00604: 递归 SQL 级别 1 出现错误

ORA-01000: 超出打开游标的最大数

ORA-01000: 超出打开游标的最大数

### Cause: org.apache.ibatis.executor.BatchExecutorException: com.bosssoft.helpPool.mapper.CapitalMapper.saveCapital (batch index #298) failed. 297 prior sub executor(s) completed successfully, but will be rolled back. Cause: java.sql.BatchUpdateException: ORA-00604: 递归 SQL 级别 1 出现错误

ORA-01000: 超出打开游标的最大数

ORA-01000: 超出打开游标的最大数

at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:26) ~[mybatis-3.2.8.jar:3.2.8]

at org.apache.ibatis.session.defaults.DefaultSqlSession.commit(DefaultSqlSession.java:177) ~[mybatis-3.2.8.jar:3.2.8]

at org.apache.ibatis.session.defaults.DefaultSqlSession.commit(DefaultSqlSession.java:169) ~[mybatis-3.2.8.jar:3.2.8]

at com.bosssoft.helpPool.service.impl.CapitalServiceImpl.saveCapital(CapitalServiceImpl.java:174) ~[help-pool-service-impl-0.0.1-SNAPSHOT.jar:?]

at com.bosssoft.helpPool.service.impl.CapitalServiceImpl.impData(CapitalServiceImpl.java:969) ~[help-pool-service-impl-0.0.1-SNAPSHOT.jar:?]

解决:一次提交99条

@Transactional
public void saveCapitalAdmin(Map<String, Integer> map, List<Capital> capitalList, String tableName) {
    //由于框架自身的mybatis在批量新增的时候,每次都要新建一个sqlsession,效率很低,并且它不读mybatis-config,所以
    //这里采用手动获取批处理sqlsession的方式来处理
    SqlSession sqlSession=getBatchSession();
    CapitalMapper capitalMapper1=sqlSession.getMapper(CapitalMapper.class);
    long startTime = System.currentTimeMillis();
    int i = 0;
    for (Capital capital : capitalList) {
        String uuid = NBUtil.createUUID();
        capital.setCapitalId(uuid);
        capital.setOperationTime(new Date());
        capital.setOperationUserId(TokenManager.getUserCode());
        capital.setOperationRelName(TokenManager.getToken().getUserName());
        capital.setIdcard(capital.getIdcard().toUpperCase());
        capital.setName(capital.getName().replaceAll(" ", ""));
        capital.setIsFormula("01");
        // 判断是否含有字母,含有字母只去前后空格
        if (NBUtil.judgeContainsStr(capital.getName())){
             capital.setName(capital.getName().trim());
        }else{
            capital.setName(capital.getName().replaceAll(" ", ""));
        }
        capitalMapper1.saveCapital(capital, tableName);
        //统计年份
        map.put(capital.getGrantYear(), null == map.get(capital.getGrantYear()) ? 1 : map.get(capital.getGrantYear()) + 1);
        ///99 条提交一次
        i++;
        if(i==99){
            sqlSession.commit();
            logger.info("》》》》》》》》》》》》提交99条");
            i=0;
        }
    }
    long endTime = System.currentTimeMillis();
    sqlSession.commit();
    System.out.println("程序运行时间:" + (endTime - startTime) + "ms");
    sqlSession.close();
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿hww

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值