Sap-abap-deleting-internal-tables
SAP ABAP-内部テーブルの削除
DELETEステートメントは、内部テーブルから1つ以上のレコードを削除するために使用されます。 内部テーブルのレコードは、テーブルキーまたは条件を指定するか、重複エントリを見つけることにより削除されます。 内部テーブルに一意でないキーがあり、重複するエントリが含まれている場合、テーブルの最初のエントリが削除されます。
以下は、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ステートメントは、式<K1> = <F1>、<K2> = <F2> … <Kn> = <Fn>に基づいて<internal_table>テーブルのレコードまたは行を削除するために使用されます。
注-<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の2つのフィールドがあります。 最初、mytableには8行が入力されます。ColPには値1、2、3、4、5、6、7、8が含まれます。 ColP値は毎回4ずつ増加するため、ColQには値5、6、7、8、9、10、11、および12が含まれます。
DELETEステートメントは、ColPキーフィールドの値が1または3であるmytableから行を削除するために使用されます。 削除後、出力に示されているように、mytableのColPフィールドには値2、4、5、6、7、8が含まれます。 ColQフィールドには、値6、8、9、10、11、および12が含まれます。