Учебники

SAP ABAP — удаление внутренних таблиц

Оператор DELETE используется для удаления одной или нескольких записей из внутренней таблицы. Записи внутренней таблицы удаляются либо путем указания ключа или условия таблицы, либо путем поиска повторяющихся записей. Если внутренняя таблица имеет неуникальный ключ и содержит повторяющиеся записи, первая запись из таблицы удаляется.

Ниже приведен синтаксис использования оператора DELETE для удаления записи или строки из внутренней таблицы.

DELETE TABLE <internal_table> FROM <work_area_itab>.

В приведенном выше синтаксисе выражение <work_area_itab> является рабочей областью, и оно должно быть совместимо с типом внутренней таблицы <internal_table>. Операция удаления выполняется на основе ключа по умолчанию, который может быть взят из компонентов рабочей области.

Вы также можете явно указать ключ таблицы в операторе DELETE TABLE, используя следующий синтаксис:

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

В этом синтаксисе <F1>, <F2> …. <Fn> являются полями внутренней таблицы, а <K1>, <K2> …. <Kn> являются ключевыми полями таблицы. Оператор DELETE используется для удаления записей или строк таблицы <internal_table> на основе выражений <K1> = <F1>, <K2> = <F2> … <Kn> = <Fn>.

Примечание. Если типы данных полей <F1>, <F2> …. <Fn> несовместимы с полями ключей <K1>, <K2> … <Kn>, система SAP автоматически преобразует их в совместимый формат.

пример

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.

Приведенный выше код производит следующий вывод —

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

В этом примере mytable имеет два поля, ColP и ColQ. Первоначально mytable заполняется восемью строками, где ColP содержит значения 1, 2, 3, 4, 5, 6, 7 и 8. ColQ содержит значения 5, 6, 7, 8, 9, 10, 11 и 12, потому что значения ColP увеличиваются на 4 каждый раз.

Оператор DELETE используется для удаления строк из mytable, где значение поля ключа ColP равно 1 или 3. После удаления поле ColP в mytable содержит значения 2, 4, 5, 6, 7 и 8, как показано на выходе. Поле ColQ содержит значения 6, 8, 9, 10, 11 и 12.