日期:2014-05-16  浏览次数:20444 次

oracle数据库零碎---Oracle Merge 使用,表中存在数据就修改,没有数据自动添加

Oracle9i引入了MERGE命令,你能够在一个SQL语句中对一个表同时执行insertsupdates操作. MERGE命令从一个或多个数据源中选择行来updatinginserting到一个或多个表.Oracle10gMERGE有如下一些改进:

1UPDATEINSERT子句是可选的

2UPDATEINSERT子句可以加WHERE子句

3、在ON条件中使用常量过滤谓词来insert所有的行到目标表中,不需要连接源表和目标表

4UPDATE子句后面可以跟DELETE子句来去除一些不需要的行

语法:

MERGEHINTINTO SCHEMA .TABLE T_ALIAS

USINGSCHEMA . {TABLE | VIEW |SUBQUERY } T_ALIAS

ON (CONDITION)

WHENMATCHEDTHEN MERGE_UPDATE_CLAUSE

WHENNOTMATCHED THEN MERGE_INSERT_CLAUSE / MERGE_DELETE_CLAUSE;

联想:
merge into是特有的功能,相当于在 MSSQL中的

ifexists(...)

updatetable

else

Insertinto table.

mergeinto语法不仅没有if exists语法啰嗦,而且比if exists还要高效很多,常用来在oracle之间同步数据库表。

例子:

1、创建测试表及数据

[c-sharp] view plaincopyprint?
  1. DROP TABLE PRODUCTS;
  2. DROP TABLE NEWPRODUCTS;
  3. create table PRODUCTS
  4. (
  5. PRODUCT_ID INTEGER,
  6. PRODUCT_NAME VARCHAR2(60),
  7. CATEGORY VARCHAR2(60)
  8. );
  9. insert into PRODUCTS values (1501, 'VIVITAR 35MM', 'ELECTRNCS');
  10. insert into PRODUCTS values (1502, 'OLYMPUS IS50', 'ELECTRNCS');
  11. insert into PRODUCTS values (1600, 'PLAY GYM', 'TOYS');
  12. insert into PRODUCTS values (1601, 'LAMAZE', 'TOYS');
  13. insert into PRODUCTS values (1666, 'HARRY POTTER', 'DVD');
  14. commit;
  15. create table NEWPRODUCTS
  16. (
  17. PRODUCT_ID INTEGER,
  18. PRODUCT_NAME VARCHAR2(60),
  19. CATEGORY VARCHAR2(60)
  20. );
  21. insert into NEWPRODUCTS values (1502, 'OLYMPUS CAMERA', 'ELECTRNCS');
  22. insert into NEWPRODUCTS values (1601, 'LAMAZE', 'TOYS');
  23. insert into NEWPRODUCTS values (1666, 'HARRY POTTER', 'TOYS');
  24. insert into NEWPRODUCTS values (1700, 'WAIT INTERFAC