该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据.ORACLE9i中,使用此命令必须同时指定UPDATE和INSERT关键词,ORACLE10g做了如下改动。
1,insert和update是可选的
2,UPDATE和INSERT后面可以跟WHERE子句
3,在ON条件中可以使用常量来insert所有的行到目标表中,不需要连接到源表和目标表
4,UPDATE子句后面可以跟delete来去除一些不需要的行。
举例:
createtablePRODUCTS
(
PRODUCT_IDINTEGER,
PRODUCT_NAMEVARCHAR2(60),
CATEGORYVARCHAR2(60)
);
insertintoPRODUCTSvalues(1501,'VIVITAR35MM','ELECTRNCS');
insertintoPRODUCTSvalues(1502,'OLYMPUSIS50','ELECTRNCS');
insertintoPRODUCTSvalues(1600,'PLAYGYM','TOYS');
insertintoPRODUCTSvalues(1601,'LAMAZE','TOYS');
insertintoPRODUCTSvalues(1666,'HARRYPOTTER','DVD');
commit;
createtablePRODUCTS_new
(
PRODUCT_IDINTEGER,
PRODUCT_NAMEVARCHAR2(60),
CATEGORYVARCHAR2(60)
);
insertintoPRODUCTS_newvalues(1666,'HARRYPOTTER','DVD');
commit;
select*fromPRODUCTS;
select*fromPRODUCTS_new;
--将PRODUCTS表中的数据导入PRODUCTS_new
MERGEINTOPRODUCTS_newp
USINGPRODUCTSnp
--当p.PRODUCT_ID=np.PRODUCT_ID时
ON(p.PRODUCT_ID=np.PRODUCT_ID)
--如果匹配则执行下面sql(update)
WHENMATCHEDTHEN
UPDATESETp.product_name=np.product_name
--如果不匹配则执行下面sql(insert)
WHENNOTMATCHEDTHEN
insertvalues(np.PRODUCT_ID,np.PRODUCT_NAME,np.CATEGORY);
1.insert和update都带有where字句:
--将PRODUCTS表中的数据导入PRODUCTS_new
MERGEINTOPRODUCTS_newp
USINGPRODUCTSnp
--当p.PRODUCT_ID=np.PRODUCT_ID时
ON(p.PRODUCT_ID=np.PRODUCT_ID)
--如果匹配则执行下面sql(update)
WHENMATCHEDTHEN
UPDATESETp.product_name=np.product_nameWHEREp.category='DVD'
--如果不匹配则执行下面sql(insert)
WHENNOTMATCHEDTHEN
insertvalues(np.PRODUCT_ID,np.PRODUCT_NAME,np.CATEGORY)WHEREnp.category!='BOOKS';
2.无条件的insert:
--将PRODUCTS表中的数据导入PRODUCTS_new
MERGEINTOPRODUCTS_newp
USINGPRODUCTSnp
--无条件insert
ON(1=0)
--如果匹配则执行下面sql(update)
WHENMATCHEDTHEN
UPDATESETp.product_name=np.product_name
--如果不匹配则执行下面sql(insert)
WHENNOTMATCHEDTHEN
insertvalues(np.PRODUCT_ID,np.PRODUCT_NAME,np.CATEGORY);
oracle into多个变量 Oracle中merge into的使用:该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据....