標籤:style blog ar io color 使用 sp on 資料
我們操作資料庫的時候,有時候會遇到insertOrUpdate這種需求。
如果資料庫中存在資料就update,如果不存在就insert。
以前的時候,需要額外select查詢一下,如果有資料就update,如果沒有資料就insert。
而現在Orcale資料庫都提供了 MERGE 方法來處理這種需求。
MERGE 命令使用一條語句從一個或者多個資料來源中完成對錶的更新和插入資料。
MERGE 文法:
MERGE INTO [your table-name] [rename your table here] USING ( [write your query here] )[rename your query-sql and using just like a table] ON ([conditional expression here] AND [...]...) WHEN MATHED THEN [here you can execute some update sql or something else ] WHEN NOT MATHED THEN [execute something else here ! ]
使用例子:
create table TEST (ID INTEGER,VALUE VARCHAR2(255) ); insert into TEST values (1, ‘test1‘); insert into TEST values (2, ‘test2‘);
我們想插入一條資料 {ID=2,NAME=‘newtest2‘} 那麼可以這麼寫
MERGE INTO TEST T1USING (SELECT ‘2‘ as A FROM dual) T2 on (T1.ID=T2.ID)WHEN MATCHED THEN UPDATE SET T1.NAME=‘newtest2‘WHEN NOT MATCHED THEN INSERT (T1.ID, T1.NAME) VALUES (‘1‘, ‘newtest2‘);
如果ID為2的資料存在那麼 UPDATE,如果不存在INSERT
注意事項:
Merge Into的原理是,從using 搜出來的結果逐條與on條件匹配,然後決定是update還是Insert。 當USING後面的sql沒有查詢到資料的時候,Merge Into語句是不會執行update和Insert操作的。
所以要想讓Merge Into正常運行,要保證USING 後面的SELECT有資料,個人喜歡使用DUAL表作為USING後的表,方便自己控制。
Oracle中merge into的使用