博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis 中oracle 批量新增三种方法
阅读量:6622 次
发布时间:2019-06-25

本文共 2244 字,大约阅读时间需要 7 分钟。

  hot3.png

 

第一种

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

 

https://blog.csdn.net/u012184337/article/details/52318768

批量修改

update PRSP_CRM_INVERT_EXPERIENCE
INVERTNAME = #{item.invertname,jdbcType=VARCHAR},
INVERTTIME = #{item.inverttime,jdbcType=VARCHAR},
INVERTDES = #{item.invertdes,jdbcType=VARCHAR}
,UPDATETIMESTAMP=sysdate where invertid = #{item.invertid,jdbcType=VARCHAR}

 

批量新增

INSERT INTO PRSP_CRM_LPCUST (liid, custno, lpname, lpdes, delete_flg, inserttimestamp) select PRSP_CRM_LP_ID.nextval, TT1.* from (
select #{item.custno,dbcType=VARCHAR}, #{item.lpname,dbcType=VARCHAR}, #{item.lpdes,dbcType=VARCHAR}, 0, sysdate from dual
) TT1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/960823/blog/1595056

你可能感兴趣的文章
优雅地调用接口--手把手带你从0到1实现retrofit框架
查看>>
springboot使用MultipartFile
查看>>
Android绘制(一):来用shape绘出想要的图形吧!
查看>>
怎么创建直播平台
查看>>
Python爬虫的两套解析方法和四种爬虫实现
查看>>
React Native webView postMessage报错
查看>>
Thymeleaf的使用
查看>>
“物联网”与“联网物”,到底有什么差异?
查看>>
[Hadoop]MapReduce中的Partitioner与Combiner
查看>>
JavaScript Array 整理 - 元素操作
查看>>
JavaScript ES7 中使用 async/await 解决回调函数嵌套问题
查看>>
纯原生组件化-模块化的探索
查看>>
Google Play 发现恶意应用,窃取用户数字货币
查看>>
喧喧发布 2.5.3 版本,主要提升系统稳定性,优化交互体验
查看>>
测试用例设计白皮书--等价类划分方法
查看>>
删除数组中对应的元素
查看>>
知识图谱论文大合集,这份干货满满的笔记解读值得收藏
查看>>
pyqt的基本组件
查看>>
nginx日志模块及日志定时切割
查看>>
29 岁成为阿里巴巴P8,工作前5年完成晋升3连跳,他如何做到?
查看>>