¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como remover duplicatas adjacentes de uma itab no SAP ABAP: Guia completo e exemplos

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 96 Vistas
0
Cargando...

Olá

Alguém pode me explicar o uso de eliminar duplicatas adjacentes de um itab?

Com várias opções, li a teoria, mas estou bastante confuso com o uso prático.

Sei que usamos para eliminar a entrada duplicada da tabela interna.

Mas quando usar após cada declaração select? Ou quando deveria ser usado?

E qual é o uso de comparar todos os campos e comparar f1 f2, por exemplo, apenas 2 campos que pegamos?

Em terceiro lugar, quando usar a ordenação antes de usar a eliminação adjacente e em que condição?

Alguém pode esclarecer profundamente o uso completo da eliminação adjacente e as diversas opções disponíveis nela e quando usá-la sob quais condições?

Arora

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Olá,

A instrução DELETE ADJACENT DUPLICATES é usada para remover as entradas em uma tabela interna.

1. A tabela deve estar ordenada (com base na linha, ou no campo f1, f2).

Se nada for especificado com base nos campos-chave, eles serão ordenados.

Se campos forem especificados, apenas serão ordenados e as entradas serão removidas.

2. A instrução 'Comparing f1' é usada para remover entradas com base em duplicatas do campo.

Saudações

Bhupal Reddy

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Remover duplicados adjacentes remove os registros supérfluos com a mesma chave.

por exemplo, se a tabela tem três campos: campo1 campo2 campo3

e tem registros

abc 123 def

abc 123 def

abc 123 ght

se você disser

remover duplicados adjacentes da tabela comparando todos os campos, então o resultado seria

abc 123 def

abc 123 ght

se você disser

remover duplicados adjacentes da tabela comparando campo1 campo2, então o resultado seria apenas um registro

abc 123 def

Se a tabela tiver o registro

abc 123 frd

abc 123 fgr

abc 124 frd

e você não deseja duplicados no campo3, então você deve ordená-la pelo campo3

então se tornaria

abc 123 frd

abc 124 frd

abc 123 fgr

Se você usar

remover duplicados adjacentes da tabela comparando campo1 campo3, então o resultado seria apenas um registro

abc 123 frd

abc 123 fgr

Saudações,

Ravi

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

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, eliminar duplicatas adjacentes é o mesmo que eliminar 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 COMPARING ... (nome) .... Se o nome estiver vazio no tempo de 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ê pode restringir ainda 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, há 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 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 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.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

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.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?