sql >> Base de Datos >  >> RDS >> Oracle

¿Alguien podría explicar qué hace realmente la instrucción MERGE en Oracle?

¿Qué tipo de unión se realiza? Creo que es una unión externa completa, ¿verdad?

No, es una unión externa normal. La consulta necesita saber cuándo hay filas en la tabla de destino que también están en la tabla de origen y cuándo hay registros en la tabla de origen que no están en la tabla de destino. Dado que la consulta no necesita responder a las filas que están en la tabla de destino pero no en la tabla de origen, no necesita la unión externa para ir en ambos sentidos.

Sin embargo, la combinación externa no se realizará si no hay not matched cláusula (que es perfectamente válida). El optimizador es lo suficientemente inteligente como para saber que, en ese caso, una combinación interna es suficiente.

con respecto a la parte CUANDO SE COINCIDE:¿qué sucede cuando una fila de t coincide con varias filas de s?

Cuando hay varias coincidencias, la actualización se realiza para cada coincidencia. Esto significa que la última actualización será la que esté escrita en la confirmación. No hay forma de dictar un orden, por lo que, en este caso, la fuente de la actualización es efectivamente aleatoria (del conjunto de coincidencias).

Como señaló @Vincent Malgrat, esto era incorrecto. Parece que Oracle producirá un error "ORA-40926:no se puede obtener un conjunto estable de filas en la tabla de origen" si hay varias coincidencias.

con respecto a la parte CUANDO NO COINCIDE, creo que significa "cuando una fila en s no tiene correspondencia en t". ¿Tengo razón?

Eso es correcto.