oracle数据库零碎---Oracle Merge 使用,表中存在数据就修改,没有数据自动添加
1、UPDATE或INSERT子句是可选的
2、UPDATE和INSERT子句可以加WHERE子句
3、在ON条件中使用常量过滤谓词来insert所有的行到目标表中,不需要连接源表和目标表
4、UPDATE子句后面可以跟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?
 
- DROP TABLE PRODUCTS; 
 - DROP TABLE NEWPRODUCTS; 
 - 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 INTERFAC