abel533 / Mapper

Mybatis Common Mapper - Easy to use
https://mybatis.io
MIT License
7.33k stars 1.63k forks source link

在oracle下 重写insertList方法执行报ORA-00933 sql未正确结束 #659

Open yu894890489 opened 5 years ago

yu894890489 commented 5 years ago

根据ora的批量插入 insert all into a (c1,c2) values(1,2) into a (c1,c2) values(3,4) select 1 from dual的方式加了一个oracle mapper接口,并重写了一个Provider,生成的sql放入正常的xml能批量插入成功,但调用重写的方法就不行,会报ORA-00933 sql未正确结束,这个是什么原因

yu894890489 commented 5 years ago

使用了最新的包发现有提供oracle的批量插入,特地debug试了下,将自己写的和源码里的生成的批量插入sql互相替换下,结果自己的写的可以执行,源码的同样报ORA-00933 sql未正确结束

yu894890489 commented 5 years ago

有人遇到过这种问题吗 跟到源码里也没有发现什么不一样的,可就是自己写的不行

qrqhuang commented 5 years ago

所以是自己的不行, 还是集成的不行。

生成的SQL执行语句是啥, 贴出来看看

pcbopcbo commented 4 years ago

我也遇到了同样的问题, 我用的还是比较老的版本,3.3.6的mapper,2.0.1的springboot,3.4.6的mybatis 最后发现是我仿照的InsertListMapper写的OracleInsertListMapper中有一个注解需要去除掉,@Options,,自己写的SpecialOracleProvider中拼接出来sql没错误应该就可以了。 希望能够给后面的人一些帮助


这个思路可以毙掉了,今天用大量数据测试,1000条 Cause: java.sql.SQLException: ORA-24335: 无法支持 1000 列以上 注意这个错误是oracle的错误,另外实际测试发现,并不是999条就可以了,这个报错说的是oracle的参数不允许超过1000个,所以,这个insert all批量插入的思路没有实际意义了


使用 insert into table select columns from dual的格式,暂时没发现问题,性能待测试对比