Oracle Merge Into 使用注意事項


我們操作數據庫的時候,有時候會遇到insertOrUpdate這種需求。如果數據庫中存在數據就update,如果不存在就insert。Orcale數據庫都提供了 MERGE  INTO 方法來處理這種需求。

MERGE INTO 命令使用一條語句從一個或者多個數據源中完成對表的更新和插入數據。

MERGE INTO 語法:

MERGE INTO table_name alias1 
USING (table|view|sub_query) alias2
ON (join condition) 
WHEN MATCHED THEN 
    UPDATE table_name 
    SET col1 = col_val1, 
           col2 = col_val2 
WHEN NOT MATCHED THEN 
    INSERT (column_list) VALUES (column_values); 

 在 SQL Server 的語法如下:

if exists(query sql)
    update table_name SET col1 = col_val1, 
           col2 = col_val2,...  
else 
    INSERT (column_list) VALUES (column_values);

  使用例子:

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 T1
USING (SELECT '2' as ID 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有數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM