This statement either deletes a row (itab_line) or several rows
(itab_lines), which
can be specified with a table key or a table index, or it deletes adjacent duplicate rows duplicates.
System Fields
sy-subrc
Meaning
0
At least one row was deleted.
4
No rows were deleted, since no appropriate row was found when deleting using a table key or when
specifying a logical expression, the index specified when deleting using a table index was greater than the current number of rows, or no duplicate adjacent rows were found.
The system field sy-tabix is not set.
Notes
Deleting rows in internal tables using DELETE does not usually free any memory
in the internal table. Statements such as CLEAR
or FREE must be used to free this memory.
An internal table - in which all rows have been deleted with DELETE - is usually not an initial internal table.
When deleting rows in an internal table, costs are incurred for updating all existing
table keys and
table indexes. The
primary key and all unique
secondary keys
are updated directly, whereas non-unique secondary keys are only updated if the rows to be deleted are contained within an updated part of a relevant index
(lazy update). When deleting a row from a standard table and the row is found using a secondary key, the
primary table index in particular must be updated, and this usually requires a linear search.
There is no implicit selection of a suitable key or index. The used table key or table index is always specified uniquely. The syntax check issues a warning if there is a suitable
secondary table key
but this table key is not used. This warning should be removed through using the key. However, in exceptional cases, it can be bypassed using a
pragma.
Using a special variant DELETE mesh_path, rows from the last path node of a
mesh path can be deleted.
Example
Deletes all initial rows of an internal table.
DATA itab TYPE HASHED TABLE OF scarr WITH UNIQUE KEY carrid.