Oracle存在则更新,不存在则插入应用-merge

Posted libin6505

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle存在则更新,不存在则插入应用-merge相关的知识,希望对你有一定的参考价值。

 

转:

Oracle存在则更新,不存在则插入应用-merge

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hong10086/article/details/54342819

Oracle在9i引入了merge命令,

通过这个merge你能够在一个SQL语句中对一个表同时执行inserts和updates操作. 当然是update还是insert是依据于你的指定的条件判断的,Merge into可以实现用B表来更新A表数据,如果A表中没有,则把B表的数据插入A表. MERGE命令从一个或多个数据源中选择行来updating或inserting到一个或多个表

 

  1. MERGE INTO table_name alias1
  2. USING (table|view|sub_query) alias2
  3. ON (join condition)
  4. WHEN MATCHED THEN
  5. UPDATE table_name
  6. SET col1 = col_val1,
  7. col2 = col_val2
  8. WHEN NOT MATCHED THEN
  9. INSERT (column_list) VALUES (column_values);

 

在alias2中Select出来的数据,每一条都跟alias1进行 ON (join condition)的比较,如果匹配,就进行更新的操作(Update),如果不匹配,就进行插入操作(Insert)。

因此,严格意义上讲,“在一个同时存在Insert和Update语法的Merge语句中,总共Insert/Update的记录数,就是Using语句中alias2的记录数。”

实例:

T有a、b两个字段 a是主键。现在有记录(1001,2)要保存到T中,T中如果已经存在则更新字段b,没有插入。

 

 

  1. MERGE INTO T T1
  2.  
  3. USING (SELECT ‘1001‘ AS a,2 AS b FROM dual) T2
  4.  
  5. ON ( T1.a=T2.a)
  6.  
  7. WHEN MATCHED THEN
  8.  
  9. UPDATE SET T1.b = T2.b
  10.  
  11. WHEN NOT MATCHED THEN
  12.  
  13. INSERT (a,b) VALUES(T2.a,T2.b);

 

 

 

 

实例:

技术图片

mybatist 中的sql:

    1. <insert id="mergeInto" >
    2.  
    3. MERGE INTO CATEGORY_EXPERT_GRADE T1
    4. USING ( select $categoryFk as a, $expertFk as b FROM dual) T2
    5. ON ( T1.CATEGORY_FK=T2.a and T1.EXPERT_FK=T2.b)
    6. WHEN MATCHED THEN
    7. UPDATE SET T1.GRADE = #grade,jdbcType=VARCHAR
    8. WHEN NOT MATCHED THEN
    9. insert (PK, CATEGORY_FK, EXPERT_FK,GRADE, SAVE_DATE, FLAG,EXTEND1, EXTEND2, EXTEND3)
    10. values (Sequence_Shzj.nextval, #categoryFk,jdbcType=DECIMAL, #expertFk,jdbcType=DECIMAL,
    11. #grade,jdbcType=VARCHAR, #saveDate,jdbcType=DATE, #flag,jdbcType=DECIMAL,
    12. #extend1,jdbcType=VARCHAR, #extend2,jdbcType=VARCHAR, #extend3,jdbcType=VARCHAR
    13. )
    14.  
    15. </insert>

以上是关于Oracle存在则更新,不存在则插入应用-merge的主要内容,如果未能解决你的问题,请参考以下文章

HSQLDB 如果不存在则插入,如果存在则更新

Merge Into 语句代替Insert/Update在Oracle中的应用实战

MSSQL更新数据,某主键存在则更新,不存在则插入

如果图像不存在则插入文本 Aspose Mail Merge

需要使用实体框架将大量记录插入数据库

Oracle常用的SQL方法总结