您的位置:首页 > 数据库 > Oracle

oracle mybatis(Mergr into语句带序列)添加数据时如果数据存在就更新,如果不存在就插入

2018-03-02 15:16 621 查看
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Oracle
相关文章推荐