现象:在做读者信息导入的时候,导入的读者信息量有点大,结果sql报错,错误原因是执行的sql语句太长了。
原因:经断点跟踪代码,发现底层mybati xml中插入读者信息方法是个批量插入,采用union all 把所有的insert语句拼接成一个语句,然而因为导入的读者信息数据量过大,导致拼接的sql语句长度超过了6000个字符,导致报错。以下是网上查询资料结果:
mybatis-oracle批量插入问题:
如上图所示:如果插入的数据量很大,union all后,sql语句都会非常的长,数据量小,不会报错,数据量大了,sql很长,超过最大可执行长度都会报错。错误如下图所示:
解决办法:
1.改为一条一条的插入(不推荐使用)
2.改为用 insert into( *) select from xx(推荐使用)
PS:如果一个执行sq大小都都有几十kb甚至几M,那都要好好检查一下sql写得是否有问题