jueves, 17 de noviembre de 2016

MERGE

Sentencias MERGE 
Oracle Server soporta la sentencia MERGE para operaciones INSERT, UPDATE y DELETE. Mediante esta sentencia, puede actualizar, insertar o suprimir una fila condicionalmente en una tabla, con lo que se evitan varias sentencias DML. La decisión de actualizar, insertar o suprimir en la tabla destino se basa en una condición de la cláusula ON

Hay que tener privilegios de objeto INSERT y UPDATE en la tabla destino y el privilegio de objeto SELECT en la tabla origen. Para especificar la cláusula DELETE de la cláusula merge_update_clause, también debe tener el privilegio de objeto DELETE en la tabla destino. 

La sentencia MERGE es determinista. No se puede actualizar varias veces la misma fila de la tabla destino en la misma sentencia MERGE

Un enfoque alternativo es utilizar bucles PL/SQL y varias sentencias DML. La sentencia MERGE, sin embargo, es fácil de utilizar y se expresa de forma más sencilla como una única sentencia SQL. 

La sentencia MERGE es adecuada en diferentes aplicaciones de almacén de datos. Por ejemplo, en una aplicación de almacén de datos, es posible que necesite trabajar con datos procedentes de varios orígenes, algunos de los cuales pueden estar duplicados. Con la sentencia MERGE, puede agregar o modificar filas condicionalmente. 
  • Permite actualizar o insertar datos condicionalmente en una tabla de base de datos 
  • Realiza una actualización (UPDATE) si existe la fila y una inserción (INSERT) si es una fila nueva: 
    • Evita actualizaciones separadas 
    • Aumenta el rendimiento y la facilidad de uso 
    • Es útil en aplicaciones de almacenes de datos 

El ejemplo de la diapositiva hace corresponder EMPLOYEE_ID de la tabla EMPL3 con EMPLOYEE_ID de la tabla EMPLOYEES. Si encuentra una correspondencia, la fila de la tabla EMPL3 se actualiza para que se corresponda con la de la tabla EMPLOYEES. Si no encuentra la fila, la inserta en la tabla EMPL3. 

Se evalúa la condición c.employee_id = e.employee_id. Como la tabla EMPL3 está vacía, la condición devuelve false (no hay correspondencias). La lógica recae en la cláusula WHEN NOT MATCHED y el comando MERGE inserta las filas de la tabla EMPLOYEES en la tabla EMPL3.  
Si existieran las filas en la tabla EMPL3 y los identificadores de empleado se correspondieran en las dos tablas (en las tablas EMPL3 y EMPLOYEES), las filas existentes en la tabla EMPL3 se actualizarían para corresponderse con la tabla EMPLOYEES. 

Share:

0 comentarios:

Publicar un comentario

Archivo

Cual es el tema de mayor interes para ti?