关闭

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

标签: ibatisoraclejava
11209人阅读 评论(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语句应该不会写这么长吧?



5
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

批量插入数据 Oracle

在使用 Oracle 开发期间,或许我们会为编写一条一条插入语句而困恼,这里给出 对数据表进行简单批量插入的例子。 (以下均是Oracle 数据库操作)向CBAY_USER_T 批量插入数据(主...
  • qq_24452475
  • qq_24452475
  • 2016-09-11 12:57
  • 6954

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

Oracle 批量导入100万条数据不到1秒
  • u012728728
  • u012728728
  • 2016-12-22 13:48
  • 4999

oracle多行记录与批量插入

问题描述:需要把游标中查询到的数据批量插入到表中 创建如下表结构: -- Create table CREATE table CUX.CUX_GL_AR_REV_REPT ( group_i...
  • lizhangyong1989
  • lizhangyong1989
  • 2015-11-04 17:02
  • 1855

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

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

Oracle 逐条和批量插入数据方式对比

创建测试表 create table base_users (   userid         varchar2(16),   username  varchar2...
  • chuang123
  • chuang123
  • 2016-08-05 10:20
  • 3069

oracle到底能不能insert into 多个values!?

稍微熟悉oracle的都知道,如果我们想一条SQL语句向表中插入多个值的话,如果INSERT INTO 某表 VALUES(各个值),VALUES(各个值),.....;这样会报错的,因为oracle...
  • chenleixing
  • chenleixing
  • 2015-04-21 08:51
  • 59186

巧用dual表,实现Oracle的批量插入

select '一','二' from dual union all select '三','四' from dua...
  • gjf281
  • gjf281
  • 2016-12-29 09:21
  • 593

Oracle优化:大量数据插入或更新

最近遇到的一个面试题,印象很深记录如下: 面试官:现在有一张表数据量达很大,要把里面记录时间的那行更新到当前最新日期,每次更新都很卡,机器变慢影响业务,怎么优化。 我的想法是:大量的数据更新肯定会写记...
  • knuuy
  • knuuy
  • 2015-08-15 10:42
  • 6099

mybatis、oracle批量插入配置

最近做了一个excel的导入,一次性的解析好后做成yi
  • jimmy609
  • jimmy609
  • 2014-10-30 15:24
  • 7714

oracle数据库中批量插入问题

  • 2009-10-20 15:57
  • 3KB
  • 下载
    个人资料
    • 访问:555613次
    • 积分:5395
    • 等级:
    • 排名:第5839名
    • 原创:102篇
    • 转载:33篇
    • 译文:0篇
    • 评论:351条
    个人简介
    我只是一个简单的Coder,为了兴趣和理想奋斗在生活的道路上
    希望大家多多交流,共同进步,有疑问或想法请留言或者私信,也可以加群:157797573

    博客专栏
    最新评论
    你还在一个人孤独的奋斗吗?
    其实,你并不寂寞,欢迎加入CSDN Java群,这里是你的另一个家!    点击加入:CSDN Java群