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: 無法在源表中獲得一組穩定的行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM