zoukankan      html  css  js  c++  java
  • mybatis 处理Oracle数据库实现批量添加数据(如果数据存在就更新,不存在就插入)

    1.xml中写数据存在就更新,不存在就插入sql逻辑(merge into 实现)

    <insert id="insertTableList" parameterType="java.util.List">
            merge into t_czk_transInfo_interface_temp t1
            USING (
            <foreach collection="list" item="element" index="index" separator="union all">
                select
                #{element.id} ID,
                #{element.remark} REMARK,
                #{element.crateDate} CRATE_DATE,
                #{element.res1} RES1,
                #{element.res2} RES2,
                #{element.res3} RES3,
                #{element.res4} RES4,
                #{element.res5} RES5
                from dual
            </foreach>) t2
            ON (
            t1.ID =  t2.ID
            )
            WHEN MATCHED THEN
            UPDATE
            SET
            t1.REMARK = t2.REMARK,
            t1.CRATE_DATE = t2.CRATE_DATE,
            t1.RES1 = t2.RES1,
            t1.RES2 = t2.RES2,
            t1.RES3 = t2.RES3,
            t1.RES4 = t2.RES4,
            t1.RES5 = t2.RES5
            WHEN NOT MATCHED THEN
            INSERT
            (ID,REMARK,CRATE_DATE,RES1,RES2,RES3,RES4,RES5)
            values
            (t2.ID,t2.REMARK,t2.CRATE_DATE,
            t2.RES1,t2.RES2,t2.RES3,t2.RES4,t2.RES5)
        </insert>

    2.dao层调用:

        /**
         * 批量插入数据
         * @param list 数据集合
         */
        void insertTableList(@Param("list") List<TempEntity> list);

    3.上述sql样式:

    merge into 要修改的表名  别名1
    
    using (select  要修改的字段1,要修改的字段2,  关联的字段 from 表名) 别名2
    
    on (别名1.关联字段 = 别名2. 关联字段)
    
    when matched  then update  set
    
     别名1.字段 = 别名2.字段
    
     别名1.字段 = 别名2.字段

    4注意:插入的集合list最好不能有重复数据,就是id最好没有重复,批量插入才不会报错,

    否则会报错:ORA-30926: 无法在源表中获得一组稳定的行

  • 相关阅读:
    HDU 1175 连连看 (DFS+剪枝)
    CF702F T-Shirts
    UVA12538 Version Controlled IDE
    P2605 [ZJOI2010]基站选址
    P3835 【模板】可持久化平衡树
    CF915E Physical Education Lessons
    P3701 「伪模板」主席树
    P1198 [JSOI2008]最大数
    P3466 [POI2008]KLO-Building blocks
    P3919 【模板】可持久化数组(可持久化线段树/平衡树)
  • 原文地址:https://www.cnblogs.com/xianshen/p/13271979.html
Copyright © 2011-2022 走看看