服务器之家

服务器之家 > 正文

ibatis结合oracle批量插入三种方法的测评

时间:2021-06-21 13:24     来源/作者:执笔记忆的空白

第一种

?
1
2
3
4
5
6
7
8
9
10
< insert id =" insert_table " parameterclass ="java.util.list"
  <![cdata[
    insert into sj_test( col1 , col2 , col3 ) values
  ]]> 
  < iterate conjunction =","
    <![cdata[
      (#test[]. col1 #, # test []. col2 #, # test []. col3 #)
    ]]> 
  </ iterate > 
</ insert >

这种方式是网上最常见的,但是也是问题最大的,今天把我彻底纠结了,弄了几个小时,最后发现,oracle不支持 一个insert多个values的方式,不知道网友们被坑到了没,好像mysql支持这种方式,所报的错误:ora-00933:sql命令未正确结束

第二种

?
1
2
3
4
5
6
7
8
9
<insert id="insert_table " parameterclass="java.util.list">
 insert all
 <iterate conjunction="">
 into sj_test( col1 , col2 , col3 ) values
 (#test[]. col1 #, # test []. col2 #, # test []. col3 #)
 </iterate>
 <!--必须要加上 -->
 select * from dual
</insert>

这种方式,oracle支持,其他的数据库就不知道支不支持,但是这种方式有个局限性,就是你插入的表的列数* 你插入的行数 <1000 才有效

如:

我今天需要插入的表有13列字段,总共需要插入246行,在执行的时候

他就报:ora-24335 cannot support more than 1000 columns

第三种方式

?
1
2
3
4
5
6
7
8
9
10
<insert id="insert_table" parameterclass="java.util.list">
insert into sj_test( col1 , col2 , col3 ) values  select
col1 , col2 , col3
from (
<iterate conjunction=" union all ">
select
#test[].col1# as col1 , #test []. col2# as col2, # test[].col3# as col3 from dual
</iterate>
)
</insert>

这种方式 是先将list里面的值,循环拼接成一个查询虚拟表,然后再通过查询虚拟表,获取每一行的数据 插入到你需要插入的表里面去.    这样的话有个需要注意的地方,就是你拼接的sql语句的长度有没有超过oracle的最大长度,不过oracle的最大长度是64kb,你的sql语句应该不会写这么长吧?

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接

原文链接:https://blog.csdn.net/moneyshi/article/details/22807239

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021德云社封箱演出完整版 2021年德云社封箱演出在线看
2021德云社封箱演出完整版 2021年德云社封箱演出在线看 2021-03-15
返回顶部