postgres数据库批量插入,重复则更新

<!--批量插入,重复则更新-->
<update id="insertAndUpdateOnDutyPerson" parameterType="com.hikvision.js.ispsstatistics.entity.OnDutyPerson">
    insert into
    <include refid="TableName"/>
    (
    <include refid="Base_Column_List"/>
    )
    values
    <foreach collection="list" item="item" index="index" separator=",">
        (#{item.id,jdbcType=VARCHAR},
        #{item.onDutyDate,jdbcType=VARCHAR},
        #{item.name,jdbcType=VARCHAR},
        #{item.idCard,jdbcType=VARCHAR},
        #{item.policeCode,jdbcType=VARCHAR},
        #{item.orgCode,jdbcType=VARCHAR},
        #{item.orgName,jdbcType=VARCHAR},
        #{item.phoneNum,jdbcType=VARCHAR},
        #{item.updateTime,jdbcType=VARCHAR}
        )
    </foreach>
    on conflict(on_duty_date,id_card,org_code) do update
    set
    (
    <include refid="Base_Column_List"/>
    )=
    (excluded.id,excluded.on_duty_date,excluded.name,excluded.id_card,excluded.police_code,excluded.org_code,excluded.org_name,excluded.phone_num,excluded.update_time)
</update>

这样的查询 do update set只能设置一条数据

插入和更新并不是批量数据一一对应操作的 而是批量insert然后再判断是否更新 所以下面只能写死一条数据 多了就报错..遂百度

发现pgsql在这种情况下会提供一个EXCLUDED临时表把之前插入的值储存起来,然后就可以

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值