Можете да опитате това
1 MERGE
2 INTO target_table tgt
3 USING source_table src
4 ON ( src.object_id = tgt.object_id )
5 WHEN MATCHED
6 THEN
7 UPDATE
8 SET tgt.object_name = src.object_name
9 , tgt.object_type = src.object_type
10 WHEN NOT MATCHED
11 THEN
12 INSERT ( tgt.object_id
13 , tgt.object_name
14 , tgt.object_type )
15 VALUES ( src.object_id
16 , src.object_name
17 , src.object_type );
Синтаксисът първоначално изглежда малко плашещ, но ако прочетем отгоре надолу, той е доста интуитивен. Обърнете внимание на следните клаузи:
•MERGE (ред 1):както беше посочено по-рано, сега това е 4-ият DML оператор в Oracle. Всички съвети, които бихме искали да добавим, следват директно тази ключова дума (т.е. MERGE /*+ HINT */);
• INTO (ред 2):така определяме целта за MERGE. Целта трябва да бъде или таблица, или актуализиран изглед (тук не може да се използва вграден изглед);
•USING (ред 3):клаузата USING представлява изходния набор от данни за MERGE. Това може да бъде единична таблица (както в нашия пример) или вграден изглед;
•ON () (ред 4):клаузата ON е мястото, където осигуряваме свързването между изходния набор от данни и целевата таблица. Имайте предвид, че условията за присъединяване трябва да са в скоби;
• WHEN MATCHED (ред 5):тази клауза е мястото, където инструктираме Oracle какво да прави, когато вече имаме съвпадащ запис в целевата таблица (т.е. има съединение между изходния и целевия набор от данни). Очевидно искаме АКТУАЛИЗАЦИЯ в този случай. Едно от ограниченията на тази клауза е, че не можем да актуализираме нито една от колоните, използвани в клаузата ON (въпреки че, разбира се, не е необходимо, тъй като те вече съвпадат). Всеки опит за включване на колона за присъединяване ще предизвика неинтуитивно изключение за невалиден идентификатор; и
• WHEN NOT MATCHED (ред 10):тази клауза е мястото, където ВМЪКВАМЕ записи, за които няма текущо съвпадение.