mybatis+oracle添加數據時如果數據存在就更新,如果不存在就插入



<insert id="insertBill" parameterType="java.util.List">

<!-- 普通的批量插入數據
注意:

  mybatis的jdbcType的值必須是全部大寫,#{item.billCode,jdbcType=VARCHAR}

  Mybatis中jdbcType的整數類型應該為NUMERIC,而不是oracle中的整形NUMBER

-->
insert all
<foreach collection="list" item="item" index="index" >
into T_INTERF_XUE_BILL_TLJ
( bill_code, SEND_DATE, PIECE_NUMBER, BILL_WEIGHT,
REGISTER_DATE, REGISTER_MAN, REGISTER_MAN_CODE, REGISTER_SITE, REGISTER_SITE_CODE
)
values
(
#{item.billCode,jdbcType=VARCHAR} ,
#{item.sendDate,jdbcType=DATE} ,
#{item.pieceNumber,jdbcType=NUMERIC} ,
#{item.billWeight,jdbcType=NUMERIC} ,
#{item.registerDate,jdbcType=DATE} ,
#{item.registerMan,jdbcType=VARCHAR} ,
#{item.registerManCode,jdbcType=VARCHAR} ,
#{item.registerSite,jdbcType=VARCHAR},
#{item.registerSiteCode,jdbcType=VARCHAR}
)
</foreach>
select 1 from dual
</insert>

但是大部分業務是這樣的,添加數據時如果數據存在就更新,如果不存在就插入,


<insert id="insertBill" parameterType="java.util.List">

        merge into T_INTERF_XUE_BILL_TLJ t
        using(
        <foreach collection="list" item="item" index="index" separator="union">
            select
            #{item.billCode,jdbcType=VARCHAR} bill_code ,
            #{item.sendDate,jdbcType=DATE} send_date,
            #{item.pieceNumber,jdbcType=NUMERIC} piece_number ,
            #{item.billWeight,jdbcType=NUMERIC} bill_weight,
            #{item.registerDate,jdbcType=DATE} register_date,
            #{item.registerMan,jdbcType=VARCHAR} register_man,
            #{item.registerManCode,jdbcType=VARCHAR} register_man_code,
            #{item.registerSite,jdbcType=VARCHAR} register_site,
            #{item.registerSiteCode,jdbcType=VARCHAR} register_site_code
            from dual
        </foreach>) t1
        on (t.bill_code = t1.bill_code)
        when matched then
        update set
        t.send_date = t1.send_date,
        t.piece_number = t1.piece_number,
        t.bill_weight = t1.bill_weight,
        t.register_date = t1.register_date,
        t.register_man = t1.register_man,
        t.register_man_code = t1.register_man_code,
        t.register_site = t1.register_site,
        t.register_site_code = t1.register_site_code
        when not matched then
        insert
        (bill_code,send_date,piece_number,bill_weight,register_date,register_man,
         register_man_code,register_site,register_site_code)
        values
        (t1.bill_code,t1.send_date,t1.piece_number,t1.bill_weight,t1.register_date,
         t1.register_man,t1.register_man_code,t1.register_site,t1.register_site_code)
    </insert>

 上述sql格式如下:

merge into 要修改的表名  別名1

using (select  要修改的字段1,要修改的字段2,  關聯的字段 from 表名) 別名2

on (別名1.關聯字段 = 別名2. 關聯字段)

when matched  then update  set

 別名1.字段 = 別名2.字段

 別名1.字段 = 別名2.字段

 


免責聲明!

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



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