Você pode tentar isso
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 );
A sintaxe a princípio parece um pouco assustadora, mas se lermos de cima para baixo, é bastante intuitiva. Observe as seguintes cláusulas:
•MERGE (linha 1):como dito anteriormente, esta é agora a 4ª instrução DML no Oracle. Quaisquer dicas que desejemos adicionar seguem diretamente esta palavra-chave (ou seja, MERGE /*+ HINT */);
•INTO (linha 2):é assim que especificamos o destino para o MERGE. O destino deve ser uma tabela ou uma visualização atualizável (uma visualização em linha não pode ser usada aqui);
•USING (linha 3):a cláusula USING representa o conjunto de dados de origem para o MERGE. Isso pode ser uma única tabela (como em nosso exemplo) ou uma visualização em linha;
•ON() (linha 4):a cláusula ON é onde fornecemos a junção entre o conjunto de dados de origem e a tabela de destino. Observe que as condições de junção devem estar entre parênteses;
•WHEN MATCHED (linha 5):esta cláusula é onde instruímos o Oracle sobre o que fazer quando já temos um registro correspondente na tabela de destino (ou seja, há uma junção entre os conjuntos de dados de origem e destino). Obviamente, queremos um UPDATE neste caso. Uma das restrições desta cláusula é que não podemos atualizar nenhuma das colunas usadas na cláusula ON (embora, é claro, não precisemos, pois elas já correspondem). Qualquer tentativa de incluir uma coluna de junção gerará uma exceção de identificador inválido não intuitivo; e
•WHEN NOT MATCHED (linha 10):esta cláusula é onde inserimos registros para os quais não há correspondência atual.