コンテンツフレーム起動

索引を使用した行の削除 文書を SAP ライブラリストラクチャに組み込む

DELETE 命令で、索引を使用してテーブルから行を削除することができます。

単一の行の削除

索引を使用して単一の行を削除するには、以下の命令を使用します。

DELETE <itab> [INDEX <idx>].

INDEX オプションを使用すると、索引 <idx> を持つ行がテーブル<itab> から削除され、後続の行の索引の値が 1 ずつ 減らされ、SY-SUBRC 0 に設定されます。索引 <idx> を持つ行がない場合は、SY-SUBRC 4 に設定されます。

INDEX オプションを使用しない場合は、上記の命令は LOOP 内でのみ使用することができます。この場合は、現在のループ行を削除します (<idx> は暗黙的に SY-TABIX に設定されます)

複数の行の削除

索引を使用して複数の行を削除するには、以下の命令を使用します。

DELETE <itab> [FROM <n1>] [TO <n2>] [WHERE <condition>].

ここでは、1 つ以上のオプションを指定する必要があります。WHERE オプションは、任意のテーブルからエントリを削除する場合と同じ効果があります。WHERE 句と同様に、FROM TO を使用して削除する行を索引によって指定することができます。索引が <n 1> <n 2> の間にある、テーブル<itab> のすべての行が削除されます。FROM オプションを指定しないと、第 1 行以降の行が削除されます。TO オプションを使用しないと、最終行までの行が削除されます。

SY-SUBRC は、1 行でも削除された場合は0 に設定され、行が削除されなかった場合は 4 に設定されます。

 例

DATA: BEGIN OF LINE,
         COL1 TYPE I,
         COL2 TYPE I,
      END OF LINE.

DATA ITAB LIKE SORTED TABLE OF LINE WITH UNIQUE KEY COL1.

DO 5 TIMES.
   LINE-COL1 = SY-INDEX.
   LINE-COL2 = SY-INDEX ** 2.
  APPEND LINE TO ITAB.

ENDDO.

DELETE ITAB INDEX: 2, 3, 4.

WRITE: 'SY-SUBRC =’, SY-SUBRC.

SKIP.

LOOP AT ITAB INTO LINE.
   WRITE: / SY-TABIX, LINE-COL1, LINE-COL2.
ENDLOOP.

出力は以下のようになります。

SY-SUBRC     4

         1          1          1
         2          3          9
         3          5         25

この例では、ソートテーブル ITAB 5 行が書き込まれます。索引 23 、および 4 を持つ 3 行が削除されます。索引 2 を持つ行が削除されたあと、以降の行の索引は 1 ずつ小さくなります。したがって、次の削除操作によって最初は 4 であった索引を持つ行が削除されます。テーブルには 3 行しかなくなったので、3 回目の削除操作は失敗します。

 例

DATA: BEGIN OF LINE,
         COL1 TYPE I,
         COL2 TYPE I,
      END OF LINE.

DATA ITAB LIKE TABLE OF LINE.

DO 30 TIMES.
   LINE-COL1 = SY-INDEX.
   LINE-COL2 = SY-INDEX ** 2.
  APPEND LINE TO ITAB.

ENDDO.

LOOP AT ITAB INTO LINE.
   IF LINE-COL1 < 28.
    DELETE ITAB.

   ENDIF.
ENDLOOP.

LOOP AT ITAB INTO LINE.
   WRITE: / SY-TABIX, LINE-COL1, LINE-COL2.
ENDLOOP.

出力は以下のようになります。

         1        28        784

         2        29        841

         3        30        900

この例では、ソートテーブル ITAB 30 行が書き込まれます。LOOP 構文を使用して、COL1 の値が 28 より小さいすべてのテーブル行が削除されます。

 例

DATA: BEGIN OF LINE,
        COL1 TYPE I,
        COL2 TYPE I,
      END OF LINE.

DATA ITAB LIKE TABLE OF LINE.

DO 40 TIMES.
   LINE-COL1 = SY-INDEX.
   LINE-COL2 = SY-INDEX ** 2.
  APPEND LINE TO ITAB.

ENDDO.

DELETE ITAB FROM 3 TO 38 WHERE COL2 > 20.

LOOP AT ITAB INTO LINE.
   WRITE: / LINE-COL1, LINE-COL2.
ENDLOOP.

出力は以下のようになります。

        1          1

         2          4

         3          9

         4         16

        39      1.521

        40      1.600

3 から 39 までの間の索引を持ち、COL2 の値が 20 より大きいすべての行が標準テーブル ITAB から削除されます。

 

 

 

 

コンテンツフレーム終了