Puedes probar esto
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 );
La sintaxis al principio parece un poco desalentadora, pero si la leemos de arriba a abajo, es bastante intuitiva. Tenga en cuenta las siguientes cláusulas:
•MERGE (línea 1):como se indicó anteriormente, esta es ahora la cuarta instrucción DML en Oracle. Cualquier sugerencia que deseemos agregar sigue directamente a esta palabra clave (es decir, MERGE /*+ HINT */);
•INTO (línea 2):así es como especificamos el objetivo para el MERGE. El destino debe ser una tabla o una vista actualizable (aquí no se puede usar una vista en línea);
•USING (línea 3):la cláusula USING representa el conjunto de datos de origen para MERGE. Puede ser una sola tabla (como en nuestro ejemplo) o una vista en línea;
•ON () (línea 4):la cláusula ON es donde proporcionamos la unión entre el conjunto de datos de origen y la tabla de destino. Tenga en cuenta que las condiciones de unión deben estar entre paréntesis;
•CUANDO COINCIDE (línea 5):esta cláusula es donde le indicamos a Oracle qué hacer cuando ya tenemos un registro coincidente en la tabla de destino (es decir, hay una unión entre los conjuntos de datos de origen y de destino). Obviamente queremos una ACTUALIZACIÓN en este caso. Una de las restricciones de esta cláusula es que no podemos actualizar ninguna de las columnas utilizadas en la cláusula ON (aunque, por supuesto, no es necesario que ya coincidan). Cualquier intento de incluir una columna de combinación generará una excepción de identificador no válido no intuitivo; y
•CUANDO NO COINCIDE (línea 10):esta cláusula es donde INSERTAMOS registros para los que no hay una coincidencia actual.