merge into 總結

來源:互聯網
上載者:User

 

MERGE語句是Oracle9i新增的文法,用來合并UPDATE和INSERT語句。是oracle特有的功能,相當於在 MSSQL中的
if exists(...)
   update table
else
   Insert into table.
merge into 文法根據一張表或子查詢的串連條件對另外一張表進行查詢,串連條件匹配上的進行UPDATE,無法匹配的執行INSERT。
這個文法僅需要一次全表掃描就完成了全部工作,不僅沒有if exists文法囉嗦,而且執行效率比if exists高很多。常用來在oracle之間同步資料庫表。

文法如下:

MERGE INTO table_name a
USING (table|view|sub_query)  b
ON (join condition)
WHEN MATCHED THEN
UPDATE table_name
SET col1 = col_val1,
col2 = col2_val
DELETE WHERE (condition)
WHEN NOT MATCHED THEN
INSERT (column_list) VALUES (column_values);

1、從文法條件上看( ON (join condition) ),merge into也是一個危險的文法。如果不謹慎使用,會將alias2 表全部覆蓋a,既危險又浪費效率,違背了增量同步處理的原則。我在設計表結構中,一般每條記錄都有“更新時間”的欄位,用a“最大更新時間”判斷b資料是否有更新和新增的資訊。須謹慎控制b條件。

2、更新的欄位,不允許有關聯條件的欄位(join condition)。比如條件是 A.ID=B.ID,那麼使用“SET A.ID=B.ID”將報出一個莫名其妙的提示錯誤。

3、使用merge的前題是在表alias2中每條記錄都是唯一的,否則會報出“在表alias2 中找不到一個穩定行”。

4、UPDATE子句後面可以跟DELETE子句來去除一些不需要的行;直接在update結束的後面加DELETE WHERE (condition)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.