Mantenha o cursor na tecla DELETE em Se38.
Pressione F1 em... Leia os detalhes na documentação da SAP.
Você aprenderá mais sobre as opções e limitações.
DELETE ADJACENT DUPLICATES FROM itab.
Extras:
1. ... COMPARANDO f1 f2 ...
2. ... COMPARANDO TODOS OS CAMPOS
Efeito
Elimina as entradas duplicadas adjacentes da tabela interna itab. Se houver n entradas duplicadas em sucessão, a primeira entrada é mantida e as seguintes n-1 entradas são eliminadas.
Duas linhas são consideradas duplicadas se suas chaves forem idênticas.
O código de retorno é definido da seguinte forma:
SY-SUBRC = 0:
Pelo menos uma duplicata foi encontrada e pelo menos uma entrada foi eliminada.
SY-SUBRC = 4:
Nenhuma duplicata foi encontrada, nenhuma entrada foi eliminada.
Adição 1
... COMPARANDO f1 f2 ...
Efeito
Duas linhas da tabela interna itab são consideradas duplicadas se tiverem conteúdos idênticos nos campos f1, f2, ...
Adição 2
... COMPARANDO TODOS OS CAMPOS
Efeito
Duas linhas da tabela interna são consideradas duplicadas se todos os conteúdos de seus campos forem idênticos.
Notas
A instrução DELETE ADJACENT DUPLICATES funciona especialmente bem se você tiver ordenado a tabela interna itab pelos campos que deseja comparar ao procurar duplicatas. Nesse caso, remover duplicatas adjacentes é o mesmo que remover todas as duplicatas. A direção da ordenação é irrelevante.
Se você não conhece uma expressão de comparação até o tempo de execução, pode especificá-la dinamicamente como o conteúdo do nome do campo na expressão COMPARANDO ... (nome) .... Se o nome estiver vazio no momento da execução, a expressão de comparação é ignorada. Se o nome contiver um nome de componente inválido, ocorrerá um erro no tempo de execução.
Você ainda pode restringir mais as expressões de comparação, tanto estáticas quanto dinâmicas, especificando deslocamento e comprimento.
Nota
Desempenho:
Ao excluir uma linha de uma tabela interna, ocorrem custos de manutenção de índices. Isso depende do índice da tabela. O tempo de execução é independente da largura da linha da tabela.
Excluir uma linha do meio de uma tabela interna com 200 entradas geralmente requer cerca de 10 msn (microssegundos padronizados).
Ao excluir um conjunto de entradas usando "DELETE itab FROM idx1 TO idx2." ou "DELETE itab WHERE ...", os custos de manutenção de índices são incorridos apenas uma vez. Isso significa que é consideravelmente mais eficiente do que excluir entradas em um loop.
Se você deseja excluir entradas duplicadas adjacentes de uma tabela interna, utilize a variante "DELETE ADJACENT DUPLICATES FROM itab." em vez de uma construção de loop.
Espero que isso ajude no futuro.