频 道 直 达 - 新闻 - 读书 - 培训 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

使用Oracle 10g MERGE语句更新数据行

作者: 佚名 出处:开发者在线  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2007-04-17 10:15
关 键 词:MERGE  更新  数据行  10g  Oracle
阅读提示:本文给出了Oracle 10g中使用MERGE语句更新数据行的实际操作实例,供大家参考!

在Oracle 9i R2版中引入的MERGE语句通常被称作“更新插入”(upsert),因为使用MERGE可以在同一个步骤中更新(update)并插入(insert)数据行,对于抽取、转换和载入类型的应用软件可以节省大量宝贵的时间,比如向数据仓库中加载数据,数据仓库中没有的数据行可以插入到数据仓库中,而已经存在的数据行也同时被更新。

在MERGE语句引入的时候,需要同时使用一条UPDATE和一条INSERT语句,顺序也是固定的(先使用UPDATE语句,然后是INSERT语句)。如果您只需要使用其中的某一条一句,您只需要使用现有的INSERT或者UPDATE语句,而不必使用MERGE语句,而删除数据可以使用DELETE语句。

在Oracle 10g R1版中,MERGE语句发生了变化,UPDATE或INSERT语句不再是必须的,而是可选项,您可以两者都用也可以都不用,而且,UPDATE语句也具备了DELETE的功能,您可以在同一个步骤中对现有的有效记录进行升级并清理废弃的记录。

列表A创建了一个表格列出现有项目:项目号码、标题、开始日期、进度完成比例以及员工对项目的响应,还创建了一个事务表格使用MERGE语句进行升级批处理。

列表A

DROP TABLE open_projects;
DROP TABLE project_updates;
CREATE TABLE open_projects
(pno NUMBER(6) PRIMARY KEY,
title VARCHAR2(40),
startdate DATE,
pctdone NUMBER(3),
empno NUMBER(6)
);
INSERT INTO open_projects VALUES
(10, 'Inventory servers', '08-JAN-07',0, 206);
INSERT INTO open_projects VALUES
(20, 'Upgrade Oracle on SRV01','15-JAN-07', 0, 206);
INSERT INTO open_projects VALUES
(30, 'Conduct skills assessment','22-JAN-07', 0, 210);
CREATE TABLE project_updates
(action CHAR(1),
pno NUMBER(6),
pctdone NUMBER(3),
empno NUMBER(6)
);
INSERT INTO project_updates VALUES
('C', 10, 50, 214);
INSERT INTO project_updates VALUES
('D', 20, NULL, NULL);
COMMIT;

一个典型的MERGE语句从识别表格开始执行升级,而且对现有的记录进行筛选测试:

MERGE INTO open_projects op
USING project_updatespu
ON (op.pno = pu.pno)
...

表格open_projects会接受更新的数据,而project_updates表格则不会改变,如果项目号码(pno)在两个表格中都一样,那么数据行则被认为是相同的。

MERGE语句剩下的部分是更新语句,以及DELETE WHERE语法。

...
WHEN MATCHED THEN
UPDATE SET pctdone = pu.pctdone,
empno = pu.empno
DELETE
WHERE pu.action = 'D';

列表B展示了MERGE语句运行前后的表格情况。

列表B

SQL> @mergedel_b
PNO TITLE STARTDATE PCTDONE EMPNO
---------- ----------------------------------------
10 Inventory servers 08-JAN-07 0 206
20 Upgrade Oracle on SRV01 15-JAN-07 0 206
30 Conduct skills assessment 22-JAN-07 0 210
A PNO PCTDONE EMPNO
- ---------- ---------- ----------
C 10 50 214
D 20
2 rows merged.
PNO TITLE STARTDATE PCTDONE EMPNO
---------- ----------------------------------------
10 Inventory servers 08-JAN-07 50 214
30 Conduct skills assessment 22-JAN-07 0 210
A PNO PCTDONE EMPNO
- ---------- ---------- ----------
C 10 50 214
D 20
SQL> spool off

第一个事务对第10号项目进行了改变(操作‘c’),项目完成比例从0变成了50,项目员工人数变成了214人;第二个事务产出了第20号项目,“随后”的列表展示了删除后的状态,而project_updates表格没有发生改变。这个例子展示了这些语句并不是必须的,而且在MERGE语句中也并不需要使用INSERT语句。

【相关文章】

【责任编辑:火凤凰 TEL:(010)68476606-8007】

发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·SQL Server入门到精通 (查看53796次)
·SQL Server 2005全解 (查看49265次)
·Oracle数据库开发指南 (查看30450次)
·Oracle SQL 内置函数大全 (查看28330次)
·MySQL数据库备份 (查看24050次)
订阅技术快讯
电子杂志下载
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
名称:2006中国IT论坛精品集合
简介:本书由“51CTO论坛推广联盟”制作完成。书中所有内容均来自各联盟成员的论坛(网站)。制作本书的目的是为了集中大家的优势资源,将更多更精彩的内容带给广大技术爱好者。本书是联盟成立以来制作的第一本书。
关键字阅读
频道精选
主编信箱 热线:010-66476606 告诉我们您想看的:专题 文章
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 意见反馈 | 网站地图
Copyright©2005-2007 51CTO.COM 版权所有