DELETE
15.4 DELETE
DELETEは、内部テーブルから行を削除する命令です。条件を付けると、条件に合う行をすべて削除します。
条件による削除は、次のような構文になります。
前述で説明したその他の内部テーブル操作命令と同様に「条件式」を加えた場合は、それに当てはまる
レコードをすべて削除します。
さらに、DELETEを使えば、重複削除を行うことができます。
次の構文は、内部テーブル内の隣接する重複レコードを削除する構文です。
テーブル内の隣接するキー項目が同値の場合、2行目以降の重複行を削除します。
COMPARINGで項目名を指定している場合は、その項目名が重複している場合、2行目以降の重複行を削除します。
注意点として、この構文では隣接していない重複行は削除されません。
内部テーブル内のすべての重複行を削除する場合は、事前にソートをかけておくとよいでしょう。
項目キーによるテーブルからのレコード削除は、次のような構文になります。
上記の構文では、<構造>は、<内部テーブル>と中身が一致している必要があります。
またこの構文を使用する際は、宣言する内部テーブルにキー項目を設定しておく必要があります。
上記の構文では、 WITH TABLE KEY の後の式
<内部テーブル内の項目> = <内部テーブル内の項目に該当する値> に基づいて
<内部テーブル>の行を削除します。
「サンプルコード」①:条件削除
REPORT Z_SAMPLE154.
"------------------------------------------------------------
" 目的:
" colp = 1または3の行を削除して、残る行を確認する
"------------------------------------------------------------
TYPES:
BEGIN OF TY_LINE,
COLP TYPE I,
COLQ TYPE I,
END OF TY_LINE.
DATA:
LT_TAB TYPE STANDARD TABLE OF TY_LINE WITH EMPTY KEY,
LS_TAB TYPE TY_LINE.
START-OF-SELECTION.
DO 8 TIMES.
LS_TAB-COLP = SY-INDEX.
LS_TAB-COLQ = SY-INDEX + 4.
APPEND LS_TAB TO LT_TAB.
ENDDO.
*&---------------------------------------------------------------------*
*& DELETE
*&---------------------------------------------------------------------*
DELETE LT_TAB WHERE COLP = 1 OR COLP = 3.
LOOP AT LT_TAB INTO LS_TAB.
WRITE: / LS_TAB-COLP, LS_TAB-COLQ.
ENDLOOP.
実行結果