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有数据