程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 轉:Oracle中merge into的使用,oraclemerge

轉:Oracle中merge into的使用,oraclemerge

編輯:Oracle教程

轉:Oracle中merge into的使用,oraclemerge


  最近項目上使用Oracle的Merge,所以找來一下資料學習了解。

  該命令使用一條語句從一個或者多個數據源中完成對表的更新和插入數據. ORACLE 9i 中,使用此命令必須同時指定UPDATE 和INSERT 關鍵詞,ORACLE 10g 做了如下改動。

  特點:

  1、insert 和update是可選的 ;  

  2、UPDATE 和INSERT 後面可以跟WHERE 子句 ;

  3、在ON條件中可以使用常量來insert 所有的行到目標表中,不需要連接到源表和目標表 ;

  4、UPDATE 子句後面可以跟delete 來去除一些不需要的行。

  舉例:

  1    create table PRODUCTS   
  2     (   
  3     PRODUCT_ID INTEGER,   
  4     PRODUCT_NAME VARCHAR2(60),   
  5     CATEGORY VARCHAR2(60)   
  6     );   
  7   
  8     insert into PRODUCTS values (1501, 'VIVITAR 35MM', 'ELECTRNCS');   
  9     insert into PRODUCTS values (1502, 'OLYMPUS IS50', 'ELECTRNCS');   
 10     insert into PRODUCTS values (1600, 'PLAY GYM', 'TOYS');   
 11     insert into PRODUCTS values (1601, 'LAMAZE', 'TOYS');   
 12     insert into PRODUCTS values (1666, 'HARRY POTTER', 'DVD');   
 13     commit;   
 14   
 15     create table NEWPRODUCTS   
 16     (   
 17     PRODUCT_ID INTEGER,   
 18     PRODUCT_NAME VARCHAR2(60),   
 19     CATEGORY VARCHAR2(60)   
 20     );   
 21   
 22     insert into NEWPRODUCTS values (1502, 'OLYMPUS CAMERA', 'ELECTRNCS');   
 23     insert into NEWPRODUCTS values (1601, 'LAMAZE', 'TOYS');   
 24     insert into NEWPRODUCTS values (1666, 'HARRY POTTER', 'TOYS');   
 25     insert into NEWPRODUCTS values (1700, 'WAIT INTERFACE', 'BOOKS');   
 26     commit;   
 27 1,可省略的update 或者insert
 28       MERGE INTO products p   
 29     2 USING newproducts np   
 30     3 ON (p.product_id = np.product_id)   
 31     4 WHEN MATCHED THEN  
 32     5 UPDATE  
 33     6 SET p.product_name = np.product_name,   
 34     7 p.category = np.category;
 35   使用表newproducts中的product_name 和category字段來更新表products 中相同product_id的product_name 和category.
 36 
 37 2,當條件不滿足的時候把newproducts表中的數據INSERT 到表products中。
 38 
 39     MERGE INTO products p   
 40     USING newproducts np   
 41      ON (p.product_id = np.product_id)   
 42      WHEN NOT MATCHED THEN  
 43      INSERT  
 44      VALUES (np.product_id, np.product_name,   
 45      np.category);   
 46 3,帶條件的insert 和update
 47 
 48  MERGE INTO products p   
 49  USING newproducts np   
 50    ON (p.product_id = np.product_id)   
 51    WHEN MATCHED THEN  
 52    UPDATE  
 53    SET p.product_name = np.product_name   
 54    WHERE p.category = np.category;
 55  insert 和update 都帶有where 字句
 56 
 57 
 58  
 59 MERGE INTO products p   
 60  USING newproducts np   
 61     ON (p.product_id = np.product_id)   
 62     WHEN MATCHED THEN  
 63     UPDATE  
 64      SET p.product_name = np.product_name,   
 65      p.category = np.category   
 66     WHERE p.category = 'DVD'  
 67     WHEN NOT MATCHED THEN  
 68      INSERT  
 69      VALUES (np.product_id, np.product_name, np.category)   
 70     WHERE np.category != 'BOOKS'  
 71 4,無條件的insert
 72 
 73 MERGE INTO products p   
 74  USING newproducts np   
 75   ON (1=0)   
 76   WHEN NOT MATCHED THEN  
 77    INSERT  
 78    VALUES (np.product_id, np.product_name, np.category)   
 79    WHERE np.category = 'BOOKS'  
 80 5,delete 子句
 81 
 82 1  merge into products p
 83   2  using newproducts np
 84   3  on(p.product_id = np.product_id)
 85   4  when matched then
 86   5  update
 87   6  set p.product_name = np.product_name
 88   7  delete where category = 'macle1_cate';
 89 
 90 select *
 91 
 92 from products;
 93 
 94  PRODUCT_ID PRODUCT_NAME         CATEGORY
 95 --------------------------------------- -------------------- --------------------
 96                                    1502 macle22              macle2_cate
 97                                    1503 macle3                macle2_cate
 98                                    1504 macle                  macle1_cate
 99                                    1505 macle5                macle5_cate
100 
101 1504 中的macle1_cate 滿足delete where,但是不滿足 on 中的條件,所以沒有被刪除。!!!!!!

  在進行SQL語句編寫時,我們經常會遇到大量的同時進行Insert/Update的語句 ,也就是說當存在記錄時,就更新(Update),不存在數據時,就插入(Insert)。

  Merge格式:

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     = col2_val 
8 WHEN NOT MATCHED THEN 
9     INSERT (column_list) VALUES (column_values);

  用中文來解釋Merge語法,就是:

  在alias2中Select出來的數據,每一條都跟alias1進行 ON (join condition)的比較,如果匹配,就進行更新的操作(Update),如果不匹配,就進行插入操作(Insert)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved