• Oracle Merge Into的用法详解


      1.    MERGE INTO 的用途
             MERGE INTO 是Oracle 9i以后才出现的新的功能。那这个功能 是什么呢?
             简单来说,就是:“有则更新,无则插入”
             从这句话里,应该可以理解到,merge into 操作一个对象'A'的时候,要有另外一个结果集做为源数据 'B'.
             ‘merge into’  将B中的数据与A中的数据按照一定条件'C'进行对比,如果 A中数据满足C条件,则进行update操作,如果不满足条件 'C',则进行insert操作。(请注意这种对应关系)

    2、 语法结构
           
           MERGE [INTO] [schema.]table [alias]
           USING {[schema.]table|views|query} [alias]
           ON {condition}
           WHEN MATCHED THEN UPDATE SET {clause}
           WHEN NOT MATCHED THEN INSERT VALUES {clause}
          
           可以用于单条数据的处理,也可以用于数据的批处理。对于merge into来说效率要比单独执行update+insert 操作效率要高。
        但是请注意,using语句中的结果集 B不可以与merge into 的对象A相同,否则,会因为结果集A,B恒等。
    当 on() 进行等值判断时,只可以进行update操作,不能进行insert 操作,当 on() 进行不等值判断时,只可以进行insert操作,不能进行update操作。
             可能这样说还不是很清楚。下面我们实际操作演示,就会理解清楚了。

    3.   测试 MERGE INTO
    --------------------------------------------------------------------------------------------------------------
    -------------------------------------        创建测试表--TEST1    ----------------------------------

    1 CREATE TABLE TEST1(
    2     USERID        NUMBER,
    3     ID                 NUMBER
    4 );

    Table created

    --------------------------------------------------------------------------------------------------------------
    ----------------------------------          填充测试数据                -------------------------------  
         

    1 begin
    2   for i in 100..110 
    3   loop
    4   insert into test1 values(i,(i+100)/10);
    5   end loop;
    6 end;
    7 /

     

     

    --------------------------------------------------------------------------------------------------------------
    -----------------------------    创建测试表--TEST2 、TEST3      --------------------------------

    1 create table test2  as
    2     select userid,trunc(id,-1) id2 from test1 where length(id)=4;
    3     
    4 insert into test2 values('110','30');

     

    1 create table test3
    2 as
    3 select userid,id id3 from test1 where length(id) <> 4;

     

     

    --------------------------------------------------------------------------------------------------------------
    -----------------------------------      测试MERGE INTO            -----------------------------------

    1 MERGE INTO test3 t
    2 USING (SELECT userid,id2 FROM test2) tw
    3 ON (t.userid = tw.userid)
    4 WHEN MATCHED THEN UPDATE SET t.id3=tw.id2
    5 WHEN NOT MATCHED THEN INSERT VALUES(tw.userid,tw.id2);

     

     


    --测试完成,我们看到,test2表中的数据全部加到test3表中,而且更新了一条数据 userid=‘110’
    PS:
       on(condition_clause)这里的条件句中,可以使用=,>,< 等比较运算符。

    -------------------------------------          The  End        -------------------------------------------

  • 相关阅读:
    docker入门
    spring aop切面入门
    java 拉姆达 lamdba get
    Spring 3
    Spring 进阶二
    腾讯云 视频 点播 视频上传接口
    js 实时获取后台数据 Spring
    Spring 进阶一
    hibernate 第四天 重点查询的方式
    hibernate 第三天
  • 原文地址:https://www.cnblogs.com/qianyuliang/p/7019156.html
Copyright © 2020-2023  润新知