【原】關於Oracle Merge操作的簡單用法
Oracle9i新增的Merge是Update和Insert的功能的合集,能夠根據相關匹配條件分別進行Update和Insert操作,一次掃描即可完成兩個任務,提高了系統的效能。
1. 建立源資料表
create table SourceTable ( ID number, Name varchar2(20), Property varchar2(20) ) ; alter table SourceTable add constraint PrimarySourceTable primary key (ID); |
2. 建立完全覆蓋目標表
create table DestTable ( ID number, Name varchar2(20), Property varchar2(20) ) ; alter table DestTable add constraint PrimaryDestTable primary key (ID); |
3. 建立全歷史記錄表
create table SurrogateDestTable ( SurrogateID number, ID number, Name varchar2(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測試,比較ID和Name,如果一致則更新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; |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-145565/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle merge into用法Oracle
- 關於dva框架的簡單操作以及demo框架
- 關於oracle with as用法Oracle
- 關於oracle session的簡單測試OracleSession
- PHP中關於foreach的簡單的用法總結PHP
- execute immediate的簡單用法(oracle)Oracle
- 關於PHP檔案操作的簡單介紹PHP
- oracle中merge into用法解析Oracle
- oracle merge into 用法詳解Oracle
- ORACLE merge用法詳解Oracle
- [轉]關於oracle with as用法Oracle
- 關於python操作excel,xlwt,xlwd,最簡單的操作介紹PythonExcel
- oracle merge into用法(R1)Oracle
- oracle-merge用法詳解Oracle
- 關於Oracle遊標的簡單定義Oracle
- Java 8 中 Map 騷操作之 merge() 的用法Java
- Oracle 的 merge 更新和插入操作Oracle
- WITH的簡單用法
- oracle-merge用法詳解 (轉)Oracle
- oracle面試題[關於case when的用法]Oracle面試題
- linux下oracle的簡單操作LinuxOracle
- 【Avalonia】【跨平臺】關於控制元件陰影簡單用法控制元件
- 關於BFC的簡單理解
- 關於RabbitMQ的簡單理解MQ
- Oracle關於時間/日期的操作Oracle
- 問一個關於oracle8的簡單的問題!Oracle
- Promise的簡單用法Promise
- oracle關於分割槽相關操作Oracle
- 關於 PHP 框架的簡單思考PHP框架
- 關於GO反射的簡單定律Go反射
- 關於JSON的簡單使用JSON
- SQL中Merge的用法SQL
- sql server merge 的用法SQLServer
- 關於檔案讀寫使用RandomAccessFile類的一些簡單操作randomMac
- SQLServer MERGE 用法SQLServer
- oracle 9i/10g merge 用法Oracle
- oracle中merge的用法,以及各版本的區別 CreateOracle
- 關於GJSON包的簡單使用JSON