SAP ABAP: eliminación de tablas internas

La instrucción DELETE se utiliza para eliminar uno o más registros de una tabla interna. Los registros de una tabla interna se eliminan especificando una clave o condición de tabla o encontrando entradas duplicadas. Si una tabla interna tiene una clave no única y contiene entradas duplicadas, se elimina la primera entrada de la tabla.

A continuación se muestra la sintaxis para usar la instrucción DELETE para eliminar un registro o línea de una tabla interna:

DELETE TABLE <internal_table> FROM <work_area_itab>.

En la sintaxis anterior, la expresión <work_area_itab> es un área de trabajo y debería ser compatible con el tipo de la tabla interna <internal_table>. La operación de eliminación se realiza sobre la base de una clave predeterminada que podría tomarse de los componentes del área de trabajo.

También puede especificar una clave de tabla explícitamente en la instrucción DELETE TABLE utilizando la siguiente sintaxis:

DELETE TABLE <internal_table> WITH TABLE KEY <K1> = <F1>………… <Kn> = <Fn>.

En esta sintaxis, <F1>, <F2> .... <Fn> son los campos de una tabla interna y <K1>, <K2> .... <Kn> son los campos clave de la tabla. La instrucción DELETE se usa para borrar los registros o líneas de la tabla <internal_table> en base a las expresiones <K1> = <F1>, <K2> = <F2> ... <Kn> = <Fn>.

Note - Si los tipos de datos de los campos <F1>, <F2> .... <Fn> no son compatibles con los campos clave <K1>, <K2> ... <Kn>, el sistema SAP los convierte automáticamente en el formato compatible.

Ejemplo

REPORT  ZDELETE_DEMO. 
DATA: BEGIN OF Line1, 
ColP TYPE I, 
ColQ TYPE I, 
END OF Line1. 
DATA mytable LIKE HASHED TABLE OF Line1  
WITH UNIQUE KEY ColP. 
DO 8 TIMES. 

Line1-ColP = SY-INDEX. 
Line1-ColQ = SY-INDEX + 4. 
INSERT Line1 INTO TABLE mytable. 
ENDDO. 

Line1-ColP = 1. 
DELETE TABLE mytable: FROM Line1, 
WITH TABLE KEY ColP = 3.
LOOP AT mytable INTO Line1. 

WRITE: / Line1-ColP, Line1-ColQ. 
ENDLOOP.

El código anterior produce la siguiente salida:

2         6 
4         8 
5         9 
6         10 
7         11 
8         12

En este ejemplo, mytable tiene dos campos, ColP y ColQ. Inicialmente, mytable se completa con ocho líneas, donde ColP contiene los valores 1, 2, 3, 4, 5, 6, 7 y 8. ColQ contiene los valores 5, 6, 7, 8, 9, 10, 11 y 12 porque los valores de ColP se incrementan en 4 cada vez.

La declaración DELETE se utiliza para eliminar las líneas de mytable donde el valor del campo de clave ColP es 1 o 3. Después de la eliminación, el campo ColP de mytable contiene los valores 2, 4, 5, 6, 7 y 8, como se muestra en la salida. El campo ColQ contiene los valores 6, 8, 9, 10, 11 y 12.