这是最好的时代,这是最坏的时代,这是智慧的时代,这是愚蠢的时代;这是信仰的时期,这是怀疑的时期;这是光明的季节,这是黑暗的季节;这是希望之春,这是失望之冬;人们面前有着各样事物,人们面前一无所有;人们正在直登天堂;人们正在直下地狱。 我也要与时俱进了,被itpub2.0牵着尾巴,拼命的奔跑,不停的灌水...

【原】关于Oracle Merge操作的简单用法

上一篇 / 下一篇  2008-02-29 16:10:07 / 个人分类:数据库专区

Oracle9i新增的Merge是Update和Insert的功能的合集,能够根据相关匹配条件分别进行Update和Insert操作,一次扫描即可完成两个任务,提高了系统的性能。

ITPUB个人空间!n^%YQB+[i3X

1.创建源数据表

create table SourceTable

(

IDnumber,

Namevarchar2(20),

Property varchar2(20)

)

;

alter table SourceTable add constraint PrimarySourceTable primary key (ID);

2.创建完全覆盖目标表

create table DestTable

(

IDnumber,

Namevarchar2(20),

Property varchar2(20)

)

;

alter table DestTable add constraint PrimaryDestTable primary key (ID);

3.创建全历史记录表

create table SurrogateDestTable

(

SurrogateID number,

IDnumber,

Namevarchar2(20),

Property varchar2(20)

)

;

alter table SurrogateDestTable add constraint SurrogatePrimaryDestTable primary key (SurrogateID);

Create index SurrogateDestTableIndexID on SurrogateDestTable(ID);

4.创建各个序列

create sequence SourceTableSeq

minvalue 1

maxvalue 10000

start with 1

increment by 1;

create sequence DestTableSeq

minvalue 1

maxvalue 100000

start with 1

increment by 1;

5.插入三条测试记录

INSERT INTO SourceTable VALUES(SourceTableSeq.nextval,'A','AA');

INSERT INTO SourceTable VALUES(SourceTableSeq.nextval,'B','BB');

INSERT INTO SourceTable VALUES(SourceTableSeq.nextval,'C','CC');

COMMIT;

6.进行覆盖表merge测试,根据ID进行比较,匹配则更新,不匹配则插入

MERGE INTO DestTable D

USING

(SELECT ID,Name,Property FROM SourceTable) S

ON (D.ID = S.ID)

WHEN MATCHED THEN UPDATE SET D.Name = S.Name,D.Property=S.Property

WHEN NOT MATCHED THEN INSERT (D.ID,D.Name,D.Property) VALUES (S.ID,S.Name,S.Property);

COMMIT;

7.进行全历史记录merge测试,比较IDName,如果一致则更新Property,如果不一致则插入;当然也可以全字段比较,取消Matched部分

MERGE INTO SurrogateDestTable D

USING

(SELECT ID,Name,Property FROM SourceTable) S

ON (D.ID = S.ID AND D.Name=S.Name)

WHEN MATCHED THEN UPDATE SET D.Property=S.Property

WHEN NOT MATCHED THEN INSERT (D.SURROGATEID,D.ID,D.Name,D.Property) VALUES (DestTableSeq.NextVal,S.ID,S.Name,S.Property);

COMMIT;


TAG:

piliskys的个人空间 引用 删除 piliskys   /   2008-05-04 18:08:53
我在9i上报错,奶奶的
http://www.itpub.net/thread-981849-1-1.html
wangfans的个人空间 引用 删除 wangfans   /   2008-03-03 15:30:30
10g里这个新功能确实省了不少事
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-05-17  
    123
45678910
11121314151617
18192021222324
25262728293031

数据统计

  • 访问量: 13820
  • 日志数: 52
  • 建立时间: 2007-12-07
  • 更新时间: 2008-05-15

RSS订阅

Open Toolbar