Home  >  Article  >  Database  >  Oracle 中merge into的使用介绍

Oracle 中merge into的使用介绍

WBOY
WBOYOriginal
2016-06-07 15:37:531072browse

http://blog.csdn.net/yuzhic/article/details/1896878 http://blog.csdn.net/macle2010/article/details/5980965 该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据. ORACLE 9i 中,使用此命令必须同时指定UPDATE 和INSERT 关键词,ORACLE

http://blog.csdn.net/yuzhic/article/details/1896878

http://blog.csdn.net/macle2010/article/details/5980965

该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据. ORACLE 9i 中,使用此命令必须同时指定UPDATE 和INSERT 关键词,ORACLE 10g 做了如下改动。

1,insert 和update是可选的 2,UPDATE 和INSERT 后面可以跟WHERE 子句 3,在ON条件中可以使用常量来insert 所有的行到目标表中,不需要连接到源表和目标表 4,UPDATE 子句后面可以跟delete 来去除一些不需要的行。

举例:

create table PRODUCTS   
    (   
    PRODUCT_ID INTEGER,   
    PRODUCT_NAME VARCHAR2(60),   
    CATEGORY VARCHAR2(60)   
    ); 

   insert into PRODUCTS values (1501, 'VIVITAR 35MM', 'ELECTRNCS');   
    insert into PRODUCTS values (1502, 'OLYMPUS IS50', 'ELECTRNCS');   
    insert into PRODUCTS values (1600, 'PLAY GYM', 'TOYS');   
    insert into PRODUCTS values (1601, 'LAMAZE', 'TOYS');   
    insert into PRODUCTS values (1666, 'HARRY POTTER', 'DVD');   
    commit; 


  create table newproducts   

    (   
    product_id integer,   
    product_name varchar2(60),   
    category varchar2(60)   
    ); 
    
     insert into newproducts values (1502, 'OLYMPUS CAMERA', 'ELECTRNCS');   
    insert into newproducts values (1601, 'LAMAZE', 'TOYS');   
    insert into newproducts values (1666, 'HARRY POTTER', 'TOYS');   
    insert into newproducts values (1700, 'WAIT INTERFACE', 'BOOKS');   
    commit; 

实施数据的更新:

 merge into products p using newproducts np
    on (p.product_id=np.product_id) 
    when matched then 
    update
    set p.product_name=np.product_name,
    p.category=np.category;

 使用表newproducts中的product_name 和category字段来更新表products 中相同product_id的product_name 和category

实施数据的差异插入:

merge into products p
    using newproducts np
    on (p.product_id=np.product_id)
    when not matched then
    insert values (np.product_id,np.product_name,np.category);

当条件不满足的时候把newproducts表中的数据INSERT 到表products中


带条件的insert

   merge into products p   
   using newproducts np   
   on (1=1)   
   when  not matched then  
    insert  
    values (np.product_id, np.product_name, np.category)   
    where np.category = 'F4' 

带条件的 insert 和update

   merge into products p   
 using newproducts np   
    on (p.product_id = np.product_id)   
    when matched then  
    update  
     set p.product_name = np.product_name,   
     p.category = np.category   
    where p.category = 'f3'  
    when not matched then  
     insert  
     values (np.product_id, np.product_name, np.category)   
    where np.category != 'f4' 

无条件的insert:

merge into products p   
using newproducts np   
on (1=0)   
when not matched then  
insert  
values (np.product_id, np.product_name, np.category)   
where np.category = 'f1'  ;

delete 子句;

merge into products p
using newproducts np
on(p.product_id = np.product_id)
when matched then
update
set p.product_name = np.product_name
delete where category = 'q1';

 delete 操作必须满足on 条件时才能执行where字句删除products表中数据的操作。

使用此语法之前,请一定要进行测试。


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn