您的位置:首页 > 数据库 > Oracle

Oracle中merge into的使用:该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据.

2013-07-18 15:23 686 查看
该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据. 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 PRODUCTS_new
(
PRODUCT_ID INTEGER,
PRODUCT_NAME VARCHAR2(60),
CATEGORY VARCHAR2(60)
);

insert into PRODUCTS_new values (1666, 'HARRY POTTER', 'DVD');
commit;
select * from PRODUCTS;
select * from PRODUCTS_new;

--将PRODUCTS表中的数据导入PRODUCTS_new
MERGE INTO PRODUCTS_new p
USING PRODUCTS np
--当p.PRODUCT_ID = np.PRODUCT_ID时
ON (p.PRODUCT_ID = np.PRODUCT_ID)
--如果匹配则执行下面sql(update)
WHEN MATCHED THEN
UPDATE SET p.product_name = np.product_name
--如果不匹配则执行下面sql(insert)
WHEN NOT MATCHED THEN
insert values(np.PRODUCT_ID,np.PRODUCT_NAME,np.CATEGORY);

1.insert 和update 都带有where 字句:
--将PRODUCTS表中的数据导入PRODUCTS_new
MERGE INTO PRODUCTS_new p
USING PRODUCTS np
--当p.PRODUCT_ID = np.PRODUCT_ID时
ON (p.PRODUCT_ID = np.PRODUCT_ID)
--如果匹配则执行下面sql(update)
WHEN MATCHED THEN
UPDATE SET p.product_name = np.product_name WHERE p.category = 'DVD'
--如果不匹配则执行下面sql(insert)
WHEN NOT MATCHED THEN
insert values(np.PRODUCT_ID,np.PRODUCT_NAME,np.CATEGORY) WHERE np.category != 'BOOKS';
2.无条件的insert:
--将PRODUCTS表中的数据导入PRODUCTS_new
MERGE INTO PRODUCTS_new p
USING PRODUCTS np
--无条件insert
ON (1=0)
--如果匹配则执行下面sql(update)
WHEN MATCHED THEN
UPDATE SET p.product_name = np.product_name
--如果不匹配则执行下面sql(insert)
WHEN NOT MATCHED THEN
insert values(np.PRODUCT_ID,np.PRODUCT_NAME,np.CATEGORY);

本文出自 “紫晶幻治” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: