Merge
El prefijo Merge se puede añadir a cualquier sentencia LOAD o SELECT en el script para especificar que la tabla cargada debe fusionarse en otra tabla. También especifica que esta sentencia debe ejecutarse en una carga parcial.
El uso típico es cuando carga un registro de cambios y desea usarlo para aplicar inserts, updates y deletes a una tabla existente.
Sintaxis:
Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)
Durante una recarga normal (no parcial), la construcción Merge LOAD funcionará como una sentencia Load normal pero con la funcionalidad adicional de eliminar registros obsoletos más antiguos y registros marcados para su eliminación. El primer campo de la sentencia de carga debe contener información sobre la operación: Insert, Update o Delete.
Para cada registro cargado, el identificador de registro se comparará con los registros cargados previamente y solo se mantendrá el último registro (según el número de secuencia). Si el último registro está marcado con Delete, no se conservará ninguno.
Si se utiliza el prefijo Concatenate o si existe una tabla con el mismo conjunto de campos, los registros se agregarán a la tabla existente correspondiente. De otro modo, el resultado de la construcción Merge LOAD se almacenará en una tabla nueva.
Si se utiliza el prefijo Concatenate, la tabla resultante puede tener más campos que el registro de cambios que se utiliza como entrada para Merge.
Una recarga parcial hará lo mismo que una recarga completa. La única diferencia es que la construcción Merge LOAD nunca creará una nueva tabla. Siempre existe una tabla relevante de la ejecución del script anterior para modificar.
Si el registro de cambios cargado es un registro acumulado, es decir, contiene cambios que ya se han cargado, el parámetro SequenceNoVar se puede utilizar en una cláusula Where para limitar la cantidad de datos de entrada. La construcción Merge LOAD luego se podría hacer que solo cargue registros donde el campo SequenceNoField sea mayor que SequenceNoVar. Una vez finalizado, Merge LOAD asignará un nuevo valor al valor SequenceNoVar máximo que se ve en el campo SequenceNoField.
Argumentos:
Argumento | Descripción |
---|---|
only | Es un cualificador opcional que indica que la sentencia debe ejecutarse solo durante recargas parciales. Debe ignorarse durante las recargas normales (no parciales). |
SequenceNoField | El nombre del campo que contiene una marca de tiempo o un número de secuencia que define el orden de las operaciones. |
SequenceNoVar |
El nombre de la variable a la que se le asigna el valor máximo del SequenceNoField de la tabla que se está fusionando. |
ListOfKeys | Una lista separada por comas de nombres de campo que especifican la clave principal. |
operation | El primer campo de la sentencia de carga debe contener la operación: Insert, Update o Delete. ‘i’, ‘u’ y ‘d’ también se aceptan. |