Merge是一个非常有用的功能,类似于Mysql里的insert into on duplicate key.
Oracle在9i引入了merge命令,
通过这个merge你能够在一个SQL语句中对一个表同时执行inserts和updates操作. 当然是update还是insert是依据于你的指定的条件判断的,Merge into可以实现用B表来更新A表数据,如果A表中没有,则把B表的数据插入A表. MERGE命令从一个或多个数据源中选择行来updating或inserting到一个或多个表
语法如下
MERGE INTO [要插入数据的表] [表别名]
USING ( [查询语句(字段名和要插入表的字段名匹配上)] )[查询结果作为表起个别名]
ON ([两个表关联的表达式] AND […]…)
WHEN MATHED THEN [update语句或其他操作语句]
WHEN NOT MATHED THEN [insert语句或其他操作语句 ]
MERGE INTO table_a t
USING (
SELECT 值1 别名1, 值2 别名2, 值3 别名3 FROM DUAL
UNION ALL
SELECT 值1 别名1, 值2 别名2, 值3 别名3 FROM DUAL ) t1
ON ( t.列1 = t1.别名1 AND t.列2= t1.别名2 )
WHEN MATCHED THEN
UPDATE
SET t.列1= t1.别名1,
t.列2 = t1.别名2,
t.列3 = t1.别名3
WHEN NOT MATCHED THEN
INSERT ( 列1, 列2, 列3 )
VALUES
(
t1.别名1,
t1.别名2,
t1.别名3
)