Możesz tego spróbować
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 );
Składnia na pierwszy rzut oka wygląda trochę zniechęcająco, ale jeśli czytamy od góry do dołu, jest dość intuicyjna. Zwróć uwagę na następujące klauzule:
•MERGE (wiersz 1):jak wspomniano wcześniej, jest to teraz czwarta instrukcja DML w Oracle. Wszelkie wskazówki, które chcielibyśmy dodać bezpośrednio po tym słowie kluczowym (np. MERGE /*+ HINT */);
•INTO (linia 2):w ten sposób określamy cel MERGE. Celem musi być tabela lub widok z możliwością aktualizacji (nie można tutaj użyć widoku wbudowanego);
•USING (wiersz 3):klauzula USING reprezentuje źródłowy zestaw danych dla MERGE. Może to być pojedyncza tabela (jak w naszym przykładzie) lub widok wbudowany;
• ON () (wiersz 4):klauzula ON to miejsce, w którym dostarczamy sprzężenie między źródłowym zbiorem danych a tabelą docelową. Pamiętaj, że warunki przyłączenia muszą być podane w nawiasach;
•WHEN MATCHED (wiersz 5):w tej klauzuli instruujemy Oracle, co zrobić, gdy mamy już pasujący rekord w tabeli docelowej (tj. istnieje połączenie między źródłowym i docelowym zbiorem danych). Oczywiście w tym przypadku chcemy UPDATE. Jednym z ograniczeń tej klauzuli jest to, że nie możemy aktualizować żadnej z kolumn użytych w klauzuli ON (choć oczywiście nie jest to konieczne, ponieważ są już zgodne). Każda próba dołączenia kolumny sprzężenia spowoduje zgłoszenie nieintuicyjnego wyjątku nieprawidłowego identyfikatora; i
•WHEN NOT MATCHED (wiersz 10):ta klauzula służy do WSTAWIANIA rekordów, dla których nie ma aktualnego dopasowania.