点评 ibatis+oracle 批量插入的三种方法.

标签: ibatis oracle java
11846人阅读 评论(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命令未正确结束




第二种

<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




第三种方式

<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语句应该不会写这么长吧?



查看评论

ibatis 搭配oracle做批量插入小结

比如,经常遇到的情况是,要把表A中的符合条件的数据全部取出来,形成一个结果集,  然后针对结果集中的每一条数据,循环插入到数据表B中去,除了传统的在JAVA代码中  FOR循环来做外,在ibati...
  • xusongsong520
  • xusongsong520
  • 2012-12-12 08:52:04
  • 7968

关于oracle+ibatis批量insert的写法

现在编写代码,总时刻要求自己,不只是实现功能,而且要质量更高。 最近使用ibatis框架,其灵活的sql编写,能够颗粒度的优化,蛮不错的。 另外使用批量insert时,找了好久,终于被我找到一...
  • cenyi2012
  • cenyi2012
  • 2015-08-14 10:09:15
  • 5823

ibatis对oracle数据库的批量更新和批量插入的操作

ibatis对oracle数据库的批量更新和批量插入的操作
  • qq_25363893
  • qq_25363893
  • 2016-01-30 19:18:34
  • 2807

Mybatis3中对oracle的批量插入

Mybatis批量插入的资料,很多都是mysql的,insert into ... values (),(),...酱紫。oracle中不支持这种语法,oracle中的批量插入是酱紫insert in...
  • nysyxxg
  • nysyxxg
  • 2013-10-28 15:28:23
  • 759

向oracle表中插入大量数据

需要大量oracle测试数据时,可以使用以下方法。 DECLARE i INT; BEGIN i := 0; WHILE(i LOOP i := i + 1; INSERT INTO TEST_TAB...
  • shenghuiping2001
  • shenghuiping2001
  • 2010-03-14 10:53:00
  • 697

SQL Server 和ORACLE 批量插入数据的两种方法

SQL Server 批量插入数据的两种方法  在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致...
  • eryongyan
  • eryongyan
  • 2013-09-26 20:29:46
  • 5090

Oracle Database Server Messages(四) . . .

Skip Headers Oracle9i Database Error Messages Release 2 (9.2) Part Number A96525-01 ...
  • mengxiangfeiyang
  • mengxiangfeiyang
  • 2014-02-24 18:21:07
  • 4454

ibatis 批量插入[类对象]到 oracle 数据库

1.实现目标:  a)使用ibatis实现批量插入数据到oracle数据库  b)插入的是类对象数据列表  c)插入的同时,需要使用数据库sequence生成对象的唯一标识  2.实现过程...
  • luofuIT
  • luofuIT
  • 2015-03-17 09:54:14
  • 897

Oracle:高效插入大量数据经验之谈

前提:在做insert数据之前,如果是非生产环境,请将表的索引和约束去掉,待insert完成后再建索引和约束。   insert into tab1 select * from tab2; comm...
  • chuang123
  • chuang123
  • 2016-08-05 10:33:20
  • 9207

Oracle批量导入100万条数据不到1秒

Oracle 批量导入100万条数据不到1秒
  • u012728728
  • u012728728
  • 2016-12-22 13:48:26
  • 6727
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 67万+
    积分: 6004
    排名: 5270
    你还在一个人孤独的奋斗吗?
    其实,你并不寂寞,欢迎加入CSDN Java群,这里是你的另一个家!    点击加入:CSDN Java群
    博客专栏
    最新评论