Sap-abap-deleting-internal-tables

提供:Dev Guides
移動先:案内検索

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が含まれます。