zoukankan      html  css  js  c++  java
  • Oracle Merge Into 使用注意事项

    我们操作数据库的时候,有时候会遇到insertOrUpdate这种需求。如果数据库中存在数据就update,如果不存在就insert。Orcale数据库都提供了 MERGE  INTO 方法来处理这种需求。

    MERGE INTO 命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据。

    MERGE INTO 语法:

    MERGE INTO table_name alias1 
    USING (table|view|sub_query) alias2
    ON (join condition) 
    WHEN MATCHED THEN 
        UPDATE table_name 
        SET col1 = col_val1, 
               col2 = col_val2 
    WHEN NOT MATCHED THEN 
        INSERT (column_list) VALUES (column_values); 

     在 SQL Server 的语法如下:

    if exists(query sql)
        update table_name SET col1 = col_val1, 
               col2 = col_val2,...  
    else 
        INSERT (column_list) VALUES (column_values);

      使用例子:

    create table TEST (ID INTEGER,VALUE VARCHAR2(255) );   
    insert into TEST values (1, 'test1');   
    insert into TEST values (2, 'test2'); 

    我们想插入一条数据  {ID=2,NAME='newtest2'}  那么可以这么写

    MERGE INTO  TEST T1
    USING (SELECT '2' as ID FROM dual) T2 on (T1.ID=T2.ID)
    WHEN MATCHED THEN UPDATE SET T1.NAME='newtest2'
    WHEN NOT MATCHED THEN  INSERT (T1.ID, T1.NAME) VALUES ('1', 'newtest2'); 

      如果ID为2的数据存在那么 UPDATE,如果不存在INSERT

    注意事项:

    Merge Into的原理是,从using 搜出来的结果逐条与on条件匹配,然后决定是update还是Insert。 当USING后面的sql没有查询到数据的时候,Merge Into语句是不会执行update和Insert操作的。所以要想让Merge Into正常运行,要保证USING 后面的SELECT有数据

  • 相关阅读:
    jqueryautocomplete
    了解CSS的查找匹配原理 让CSS更简洁、高效
    html5网页编码
    刚开始学习 mvc碰到的郁闷问题
    datatable 批量插入方法 求解?
    28个经过重新设计的著名博客案例(1120)
    递归调用中的return
    C++新建一个模板
    C++ 中用 sizeof 判断数组长度
    为什么MySQL选择REPEATABLE READ作为默认隔离级别?
  • 原文地址:https://www.cnblogs.com/LuckyZLi/p/9758681.html
Copyright © 2011-2022 走看看