viernes, mayo 23, 2008

Opciones del DELETE ADJACENT

El motivo de este post es para explicarles unas opciones del DELETE de las tablas internas, que puede resultar de gran ayuda. Supongo que los más experimentados en Abap ya sabrán de ellas, pero el resto puede que no lo hayan visto.

Supongamos que nos pasan una tabla con muchísimos registros, de los cuales pueden haber duplicados. Necesitamos tener un solo registro de cada tipo, por lo que nos interesa eliminar de la tabla los duplicados. Para ello, podemos hacer lo siguiente:
  1. ordenamos la tabla -> SORT tabla_interna.
  2. eliminamos los duplicados -> DELETE ADJACENT DUPLICATES FROM tabla_interna.

Este delete eliminaría los duplicados de los registros, pero sólo aquellos que coincidan en todos los campos. Si cada registro se compone de varios campos, tienen que coincidir en todos para ser eliminados.

Si lo que nos interesa es eliminar registros que coincidan sólo en uno, dos, ... n campos, lo especificariamos de la siguiente forma.
  1. ordenamos la tabla -> SORT tabla_interna.
  2. eliminamos los duplicados -> DELETE ADJACENT DUPLICATES FROM tabla_interna COMPARING campo1 campo2 ... campoX.

dónde cada campo es el nombre del campo en la tabla interna.

Por ejemplo.

Tenemos la estructura siguiente, formada por tres campos:



Ahora queremos aplicar lo explicado antes, pero para que tenga en cuenta sólo el campo MATKL a la hora de eliminar duplicados.
  1. SORT gt_fich_gr_articulos.
  2. DELETE ADJACENT DUPLICATES FROM gt_fich_gr_articulos COMPARING MATKL.

Se eliminarian todos los registros duplicados excepto uno, el primero de la ordenación, con el mismo campo MATKL, aunque los dos campos siguientes sean diferentes.

Gracias a Samuel Artiles.

1 comentario:

thrashaholico dijo...

Muchas gracias por la informacion! me fue muy util!