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.

実行結果


NEXT>> 15.5 内部テーブルの照会(READ、SORT、DESCRIBE)

研修の詳細はこちら