Merge
O prefixo Merge pode ser adicionado a qualquer comando LOAD ou SELECT no script para especificar que a tabela carregada deve ser mesclada em outra tabela. Ele também especifica que esse comando deve ser executado em um carregamento parcial.
O caso de uso típico é quando você carrega um log de alterações e deseja usá-lo para aplicar inserts, updates e deletes a uma tabela existente.
Sintaxe:
Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)
Durante um carregamento normal (não parcial), a construção Merge LOAD funcionará como um comando Load normal, mas com a funcionalidade adicional de remover registros antigos obsoletos e registros marcados para exclusão. O primeiro campo da instrução de LOAD deve conter informações sobre a operação: Insert, Update ou Delete.
Para cada registro carregado, o identificador de registro será comparado com registros carregados anteriormente, e somente o registro mais recente (de acordo com o número de sequência) será mantido. Se o registro mais recente estiver marcado com Delete, nada será mantido.
Se o prefixo Concatenate for usado, ou se já existir uma tabela com o mesmo conjunto de campos, esta será a tabela relevante a ser modificada. De outra forma, o resultado da construção Merge LOAD será armazenado em uma nova tabela.
Se o prefixo Concatenar for usado, a tabela resultante poderá ter mais campos que o log de alterações que é usado como entrada para Merge.
Um carregamento parcial fará o mesmo que um carregamento completo. A única diferença é que a construção Merge LOAD nunca criará uma nova tabela. Sempre existe uma tabela relevante da execução do script anterior a ser modificada.
Se o log de alterações carregado for um log acumulado, ou seja, contém alterações que já foram carregadas, o parâmetro SequenceNoVar poderá ser usado em uma cláusula Where para limitar a quantidade de dados de entrada. Dessa forma, a Merge LOAD pode ser feita para carregar somente registros em que o campo SequenceNoField é maior que SequenceNoVar. Após a conclusão, a Merge LOAD atribuirá um novo valor ao SequenceNoVar com o valor máximo visto no campo SequenceNoField.
Argumentos:
Argumento | Descrição |
---|---|
only | Um qualificador opcional indicando que o comando deve ser executado somente durante carregamentos parciais. Ele deve ser desconsiderado durante os carregamentos normais (não parciais). |
SequenceNoField | O nome do campo que contém um carimbo de data/hora ou um número de sequência que define a ordem das operações. |
SequenceNoVar |
O nome da variável que recebe o valor máximo para SequenceNoField da tabela que está sendo mesclada. |
ListOfKeys | Uma lista separada por vírgulas de nomes de campo especificando a chave primária. |
operation | O primeiro campo da instrução de LOAD deve conter a operação: Insert, Update, ou Delete. "i", "u" e "d" também são aceitos. |