1. 程式人生 > >oracle mybatis(Mergr into語句帶序列)新增資料時如果資料存在就更新,如果不存在就插入

oracle mybatis(Mergr into語句帶序列)新增資料時如果資料存在就更新,如果不存在就插入

merge語法根據源表(也可是臨時生成的表)對目標表進行查詢匹配,匹配成功時執行更新操作,不成功時執行插入操作。

1.基本語法:

merge into 目標表 T

using 源表 T1

on (T.xx1 = T1.xx1 and T.xx2=T1.xx2/*匹配條件*/)

when matched then update set

    /*需要更新的欄位*/

    T.x = T1.x...

when not matched then insert

    (

    欄位1,

    欄位2...   

    )

values(

值1,

值2...

    )

<insert id="saveOrUpdateBatch" 
parameterType="java.util.List"> MERGE INTO T_ZZ_RS_EDU T USING ( <foreach collection="list" item="item" index="index" separator="union"> (select #{item.eduExpid,jdbcType=DECIMAL} AS RS_EID, #{item.personName,jdbcType=VARCHAR} AS NAME_, #{item.idCard,jdbcType=VARCHAR} AS IDCARD,
#{item.populationId,jdbcType=DECIMAL} AS CI_RS_ID, #{item.startDate,jdbcType=TIMESTAMP} AS START_DATE, #{item.endDate,jdbcType=TIMESTAMP} AS END_DATE, #{item.workUnit,jdbcType=VARCHAR} AS WORK_UNIT, #{item.workDuty,jdbcType=VARCHAR} AS WORK_DUTY, #{item.regionCode,jdbcType=VARCHAR} AS REGION_CODE,
#{item.status_,jdbcType=VARCHAR} AS STATUS_, #{item.creatorId,jdbcType=DECIMAL} AS CREATOR, #{item.createTime,jdbcType=TIMESTAMP} AS CREATE_TIME, #{item.updaterId,jdbcType=DECIMAL} AS UPDATER, #{item.updateTime,jdbcType=TIMESTAMP} AS UPDATED, #{item.resumeType,jdbcType=VARCHAR} AS RESUME_TYPE from dual) </foreach>) T1 ON(T1.RS_EID = T.RS_EID) /*資料存在*/ WHEN MATCHED THEN UPDATE SET T.RESUME_TYPE/*需要更新的欄位*/=T1.RESUME_TYPE,/*需要更新的欄位*/ T.START_DATE=T1.START_DATE, T.END_DATE=T1.END_DATE, T.WORK_UNIT=T1.WORK_UNIT, T.WORK_DUTY=T1.WORK_DUTY /*資料不存在*/ WHEN NOT MATCHED THEN INSERT ( T.RS_EID, T.NAME_, T.IDCARD, T.CI_RS_ID, T.START_DATE, T.END_DATE, T.WORK_UNIT, T.WORK_DUTY, T.REGION_CODE, T.STATUS_, T.CREATOR, T.CREATE_TIME, T.UPDATER, T.UPDATED, T.RESUME_TYPE ) VALUES ( SEQ_RS_EID.NEXTVAL, T1.NAME_, T1.IDCARD, T1.CI_RS_ID, T1.START_DATE, T1.END_DATE, T1.WORK_UNIT, T1.WORK_DUTY, T1.REGION_CODE, T1.STATUS_, T1.CREATOR, T1.CREATE_TIME, T1.UPDATER, T1.UPDATED, T1.RESUME_TYPE ) </insert>