Comando DELETE ADJACENT DUPLICATES | ABAP Warrior

Comando DELETE ADJACENT DUPLICATES

Limpar registros duplicados
Como fazer para localizar e tratar dados duplicados dentro de uma tabela interna? Algo importante e essencial. O comando DELETE ADJACENT DUPLICATES tem a finalidade de comparar os dados de uma tabela interna para encontrar duplicidades e removê-las.

Esse comando é uma das três variações do comando DELETE em tabelas internas. Confira mais uma postagem da série COMANDOS.







O que é um DELETE ADJACENT DUPLICATES ?


Esse comando é uma das três variações do comando DELETE e é usado especificamente para tratar repetições de dados em tabelas internas. É possível informar por quais colunas deverá ser feita a verificação das repetições. Ele compara os dados na tabela interna e, se houver registros considerados iguais, descarta os repetidos deixando apenas o primeiro registro.

Para que funcione de forma correta precisa ser usado sempre em parceria com o comando SORT.

Como funciona o DELETE ADJACENT DUPLICATES ?


Para usar o comando DELETE ADJACENT DUPLICATES basta informar a tabela após o comando. Se nenhum parâmetro adicional for informado, a comparação dos dados será realizada através de campos declarados com tipos alfanuméricos. A não ser que a tabela tenha sido declarada com alguma chave, neste caso a comparação dos dados será realizada através dos campos que compõe a chave.

Um exemplo da forma sem especificar parâmetros adicionais ficaria assim:
DELETE ADJACENT DUPLICATES t_dados.

No exemplo acima os dados da tabela T_DADOS serão comparados apenas pelas colunas do tipo alfanumérico. Se a tabela T_DADOS for declarada com alguma chave, a comparação será feita pelos campos da chave. Registros considerados iguais na comparação serão excluídos, deixando apenas o primeiro encontrado.

Usando com o comando SORT


Deve-se usar sempre o comando SORT antes do comando DELETE ADJACENT DUPLICATES para garantir a ordenação dos registros. Preferencialmente use os mesmos campos para ordenação e para a comparação. Isso porquê, de uma forma bem prática, o comando percorre todos os registros, mas ele compara apenas o registro atual com o próximo registro.

Imagine que internamente o sistema faz um LOOP na tabela interna percorrendo todos os registros. Quando o sistema está no registro 1, ele compara com o registros 2. Se os registros 1 e 2 forem considerados iguais segundo o critério de comparação, o registro 2 será removido da tabela fazendo com que todos os registros abaixo dele sejam automaticamente deslocados para cima. Então o sistema faz uma nova comparação ainda com o registro 1, e com o novo registro 2 (que antes era o 3, mas que foi deslocado para cima quando o antigo registro 2 foi removido). Sendo iguais, novamente o registro 2 será removido e os demais deslocados para cima. Continuando, o sistema compara o registro 1 e o novo registro 2. Se os registros não forem iguais, o sistema segue para o registro 2. Agora apontando para o registro 2, ele compara com o registro 3. Se forem iguais, remove o 3. Se não forem iguais, aponta para o 3. E assim vai sequencialmente até o penúltimo registro.

Perceba que, com esta lógica, se os registros não estiverem ordenados com o mesmo critério de comparação, o sistema não encontrará as repetições e não removerá os registros repetidos

Especificando colunas para comparação


Informe o parâmetro COMPARING depois da tabela e em seguida as colunas separadas por espaço. Com isso as colunas estarão especificadas para a comparação.

Vamos usar como um simples exemplo a tabela abaixo:

Tabela T_LOJAS com repetições

Podemos perceber que a loja A002 aparece duas vezes na tabela, porem os dois registros não estão imediatamente abaixo um do outro. Desta forma, se executarmos o comando especificando a coluna LOJA, o comando não funcionará.

DELETE ADJACENT DUPLICATES t_lojas COMPARING loja.

No exemplo acima os dados da tabela T_LOJAS serão comparados apenas pela coluna LOJA. Registros considerados iguais pela coluna LOJA serão excluídos, deixando apenas o primeiro encontrado. Porém, como a tabela não estava ordenada pela coluna LOJA, nenhum registro será excluído.

Usando o comando SORT antes do comando DELETE ADJACENT DUPLICATES faz com que os registros fiquem com a disposição correta para as comparações.

SORT t_lojas BY loja.
DELETE ADJACENT DUPLICATES t_lojas COMPARING loja.

No exemplo acima, o primeiro comando irá ordenar a tabela T_LOJAS pela coluna LOJA. Em seguida, os dados da tabela T_LOJAS serão comparados apenas pela coluna LOJA. Registros considerados iguais pela coluna LOJA serão excluídos, deixando apenas o primeiro encontrado.

No comando SORT a tabela T_LOJAS ficaria com a seguinte disposição:

tabela T_LOJAS ordenada

Agora repare que os registros da loja A002 estão imediatamente um abaixo do outro. Ao processar o comando DELETE ADJACENT DUPLICATES a tabela T_LOJAS ficaria assim:

tabela T_LOJAS final

Por fim, repare que o registro repetido da loja A002 não existe mais. É assim que funciona o comando DELETE ADJACENT DUPLICATES.

Comparação por todas as colunas


Existe ainda uma forma de fazer a comparação de repetições por todas as colunas da tabela. Basta acrescentar o parâmetro COMPARING ALL FIELDS. Mesmo assim, o comando só funcionará se a tabelas estiver ordenada.

DELETE ADJACENT DUPLICATES t_lojas COMPARING ALL FIELDS.

No exemplo acima os dados da tabela T_LOJAS serão comparados por todas as colunas. Registros considerados iguais pela coluna LOJA serão excluídos, deixando apenas o primeiro encontrado.


Espero que seja útil.
Se alguém quiser compartilhar alguma experiência usando o DELETE ADJACENT DUPLICATES, ou se tiver alguma dúvida, fiquem a vontade nos comentários.
Um grande abraço e até a próxima.
2016-04-08T19:55:00-03:00 2018-10-06T13:18:14Z
Um comentário:
Jhony disse...

ótimo conteúdo, muito útil. Obrigado

Related Posts Plugin for WordPress, Blogger...