一、情形
近期在使用达梦数据库(和Oracel语法差不多)批量插入数据的时候报错:嵌套层太多。
看了报错信息发现插入数据并不算太多一共145条,sql语句也没有问题,但就是执行不成功,感觉是拼接后的sql语句太长了,导致执行无果。
二、解决:
分批次执行,每次100条。
/**
* 分批存表数据
*/
public void insertScoreRanges(List<StdScoreRange> list) {
// 分批存 每100条 一次
int num = 100;
int loop = (int) Math.ceil(list.size() / (double) num);
List<StdScoreRange> tempList = new ArrayList<>(num);
int start = 0;
int stop = 0;
for (int i = 0; i < loop; i++) {
tempList.clear();
start = i * num;
stop = Math.min(i * num + num - 1, list.size() - 1);
for (int j = start; j <= stop; j++) {
tempList.add(list.get(j));
}
stdScoreRangeMapper.insertRanges(tempList);
}
}
这点数据量就要分批次执行,总感觉不太行,暂时也没啥想法,往后拖拖在说。