美文网首页
oracle merge into

oracle merge into

作者: 韩绝交 | 来源:发表于2017-12-03 22:49 被阅读0次

场景是,别人给我传一张表中的数据list,其中的数据有些是数据库中有的,有些是新的,已经有的我要更新,新的我要插入,oracle提供了merge into语句来实现这个功能

MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] and [...]...)  
WHEN MATCHED THEN  
    [UPDATE sql]  
WHEN NOT MATCHED THEN  
    [INSERT sql]  
  1. merge into没有返回值,返回值只有insert,update,delete三个基本的DML语句才有
  2. meige into只能把表A和表B进行比较,要么表B是已经存在的表,要么用select "常量" from dual来建立临时的只有一条数据的表

原本打算用mybatis+foreach将list中的每一条数据建立临时表和原有表进行比较,如下


image.png

但是发现执行中,如果有不止一条数据进来,就会报如下错

sql injection violation, multi-statement not allow
image.png

可以看到,我的foreach,separator=";",也就是说我最后要执行的是很多个sql,java不允许这样做。

方法二(暂时采用的方法)

在java中,用foreach循环,对list的每一条记录merge into
在使用merge into的时候,有时候会报错


image.png
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='roomInfo.roomType', mode=IN, javaType=class java.lang.Object, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #5 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 无效的列类型: 1111

错在我没有为变量指定类型,识别出来的类型为other,所以当这个字段为null时,插入不成功。解决办法是指定类型,比如#{roomInfo.roomLayer,jdbcType=VARCHAR}


image.png

这里我只将有可能为null值的字段指定,其他没管。

方法三

在数据库中创建一个临时表,将list插入数据库,再将原表和临时表进行merge into,最后将临时表的记录delete

相关文章

  • Oracle高级语句书目录

    Oracle高级语句之with as Oracle高级语句之merge into Oracle高级语句之row_n...

  • Oracle:WITH AS () Merge ?

    WITH AS 语法在SQL SERVER 和ORACLE数据库上均支持,主要用于子查询。语法如下: 但其语句在两...

  • oracle merge into

    场景是,别人给我传一张表中的数据list,其中的数据有些是数据库中有的,有些是新的,已经有的我要更新,新的我要插入...

  • Oracle Merge into 详细介绍

    Merge into 详细介绍 MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句...

  • merge into using 详解

    1、merge into 语句 MERGE 是 Oracle9i 新增的语法,根据源表对目标表进行匹配查询,匹配成...

  • oracle Merge Into 用法

    在开发中我们经常会碰到这么一个场景,列如用户修改简单的个人基本信息,这个时候就需要判断用户的基本信息是否存在,如果...

  • oracle和mysql批量合并对比

    orm框架采用mybatis,本博客介绍一下批量合并merge用oracle和mysql来做的区别, oracle...

  • oracle merge into常见用法

    table_a表与table_b有关联关系 不在库中的数据判断是否在table_a表中,存在更新否则插入 使用虚表...

  • Oracle中Merge into用法总结

    有一个表T,有两个字段a、b,我们想在表T中做Insert/Update,如果条件满足,则更新T中b的值,否则在T...

  • Oracle-merge算法示例

    当对两个表(某个字段有相同的值,也就是匹配的列)进行比较更新/插入时,可以使用merge算法,逻辑为: 使用tes...

网友评论

      本文标题:oracle merge into

      本文链接:https://www.haomeiwen.com/subject/cznabxtx.html