Конструкция merge в Oracle
Позволяет дополнять и обновлять данные одной таблицы — данными другой таблицы. При слиянии таблиц проверяется условие, и если оно истинно, то выполняется Update или Delete, а если нет — Insert. Причем нельзя изменять поля таблицы в секции Update, по которым идет связывание двух таблиц.
Синтаксис
MERGE INTO TABLE_NAME USING table_reference ON (condition) WHEN MATCHED THEN UPDATE SET column1 = value1 [, column2 = value2 ...] WHEN NOT MATCHED THEN INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...) ;
Разберем работу на примере
-- удаляем таблички drop table person; drop table person1; -- создаем и заполняем person -- создаем person1 на основе person create table Person1 #b1b100;">as select * from Person; -- изменяем данные в person -- сливаем таблицы MERGE INTO person p USING ( SELECT tabn, name, age FROM person1) p1 ON (p.tabn = p1.tabn) WHEN MATCHED THEN UPDATE SET p.age = p1.age WHEN NOT MATCHED THEN INSERT (p.tabn, p.name, p.age) VALUES (p1.tabn, p1.name, p1.age);
Источники
http://www.sql.ru/blogs/oracleandsql/1927
http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9016.htm