ORACLE中MEGER INTO的用法
使用场景:
操作数据库时,数据存在则UPDATE,不存在则INSERT时使用,ORACLE数据库都提供了 MERGE 方法来处理这种需求。
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 MATCHED THEN [here you can execute some update sql or something else ]
WHEN NOT MATCHED THEN [execute something else here ! ]
Demo:
MERGE INTO DEMO T
USING (SELECT '1' ID, 'wangyi' NAME FROM dual) P on (T.ID=P.ID)
WHEN MATCHED THEN UPDATE SET T.NAME=P.NAME
WHEN NOT MATCHED THEN INSERT (T.ID, T.NAME) VALUES (P.ID, P.NAME );
若ID为1的数据存在则更新,不存在则插入
Warning:
Merge Into的原理是,从using 搜出来的结果逐条与on条件匹配,然后决定是update还是Insert。
当USING后面的sql没有查询到数据的时候,Merge Into语句是不会执行update和Insert操作的。 所以要想让Merge
Into正常运行,要保证USING 后面的SELECT有数据。
Interesting
当在批量Update执行效率很低时可用MEGER INTO UPDATE