当前位置: 首页 > Linux

oracle数据库中mergeinto的使用,存在则更新,不存在则插入

时间:2023-04-07 03:01:28 Linux

1。在实际的应用场景中,我们会用到:如果这条数据在表中,则更新数据;如果这条数据不存在,就插入这条数据。在oracle中,可以使用mergeinto来实现。在mysql中,您可以使用ONDUPLICATEKEYUPDATE。这里只介绍oracle中mergeinto的方法。sql语法如下:mergeintotesttabletusingdualon(t.id='1')whennotmatchedtheninsert(id,a,b)values(1,2,1)whenmatchedthenupdatesetb=b+1;从测试表中选择*;(如果testtable是空表,上面语句执行后如下:)idAB--------------121select*fromtesttable;(如果再次执行mergeinto,testtable结果)idAB-----------------122说明:使用dualon(...)是一种固定的写法,可以也可以写成using(select1fromdual)on(...),表名dual也可以写成其他名字。on(...)里面是一个条件,可以写一个条件,也可以用and来连接多个条件。2.顺便介绍一下在mybatis中如何使用mergeinto,直接上传代码。代码使用动态sql。使用dualon(t.login_id=#{loginId,jdbcType=VARCHAR})合并到staff_evaluationt当不匹配时插入USER_ID,LOGIN_ID,USER_NAME,COMPLEX_SCORE,MOBILE_SERVICE_SCORE,BROADBAND_SCORE,KEEP_SCORE,test="state!=null">STATE,EVALUATE_TEXT,BEGIN_TIME,END_TIME,EVALUATE_PERSON,#{userId,jdbcType=VARCHAR},#{loginId,jdbcType=VARCHAR},#{userName,jdbcType=VARCHAR},#{complexScore,jdbcType=VARCHAR},#{mobileServiceScore,jdbcType=VARCHAR},#{broadbandScore,jdbcType=VARCHAR},#{broadbandScore,jdbcType=VARCHAR},如果>#{keepScore,jdbcType=VARCHAR},#{state,jdbcType=VARCHAR},#{evaluateText,jdbcType=VARCHAR},#{beginTime,jdbcType=VARCHAR},test="endTime!=null">#{endTime,jdbcType=VARCHAR},#{evaluatePerson,jdbcType=VARCHAR},什么时候匹配然后更新t.COMPLEX_SCORE=#{complexScore,jdbcType=VARCHAR},t.MOBILE_SERVICE_SCORE=#{mobileServiceScore,jdbcType=VARCHAR},t.BROADBAND_SCORE=#{broadbandScore,jdbcType=VARCHAR},t.KEEP_SCORE=#{keepScore,jdbcType=VARCHAR},t.EVALUATE_TEXT=#{evaluateText,jdbcType=VARCHAR},t.BEGIN_TIME=#{beginTime,jdbcType=VARCHAR},t.END_TIME=#{endTime,jdbcType=VARCHAR},t.EVALUATE_PERSON=#{evaluatePerson,jdbcType=VARCHAR},其中t.LOGIN_ID=#{loginId,jdbcType=VARCHAR}注意:不断更新标记