Sap-abap-copying-internal-tables
提供:Dev Guides
SAP ABAP-内部テーブルのコピー
ヘッダー行を持つ内部テーブルからレコードを読み取ると、そのレコードはテーブル自体からヘッダー行に移動します。 これが、プログラムが使用するヘッダー行です。 新しいレコードを作成するときにも同じことが当てはまります。 これは、新しいレコードがテーブル本体自体に送信され、そこから送信されるヘッダー行です。
レコードをコピーするには、SELECTステートメントを使用してテーブルからすべてのレコードを選択し、MOVEステートメントを使用して、元のテーブルから新しい内部テーブルに名前が対応するフィールドにレコードを移動します。
MOVEステートメントの構文は次のとおりです-
MOVE <table_field> TO <internal_tab_field>.
例
REPORT ZCUSLIST1.
TABLES: ZCUSTOMERS1.
DATA: BEGIN OF itab01 Occurs 0,
name LIKE ZCUSTOMERS1-name,
dob LIKE ZCUSTOMERS1-dob,
END OF itab01.
Select *FROM ZCUSTOMERS1.
MOVE ZCUSTOMERS1-name TO itab01-name.
MOVE ZCUSTOMERS1-dob TO itab01-dob.
ENDSELECT.
Write:/itab01-name, itab01-dob.
上記のコードは、次の出力を生成します-
MARGARET 02.11.1994
選択ループは、MOVEステートメントを使用してテーブルのフィールド間でデータを移動し、各フィールドを1つずつ埋めます。 上記の例では、MOCステートメントを使用して、ZCUSTOMERS1テーブルの内容を内部テーブルの対応するフィールドに移動しました。 このアクションは、1行のコードで実行できます。 MOVECORRESPONDINGステートメントを使用できます。
MOVE-CORRESPONDINGステートメントの構文は次のとおりです-
MOVE-CORRESPONDING <table_name> TO <internal_tab>.
ZCUSTOMERS1のフィールドからitab01の対応するフィールドにデータを移動するようにシステムに指示します。
例
REPORT ZCUSTOMERLIST.
TABLES: ZCUSTOMERS1.
DATA: Begin of itab01 occurs 0,
customer LIKE ZCUSTOMERS1-customer,
name LIKE ZCUSTOMERS1-name,
title LIKE ZCUSTOMERS1-title,
dob LIKE ZCUSTOMERS1-dob,
END OF itab01.
SELECT* from ZCUSTOMERS1.
MOVE-Corresponding ZCUSTOMERS1 TO itab01.
APPEND itab01.
ENDSELECT.
LOOP AT itab01.
Write:/itab01-name, itab01-dob.
ENDLOOP.
上記のコードは、次の出力を生成します-
MARK 21.05.1981
JAMES 14.08.1977
AURIELE 19.06.1990
STEPHEN 22.07.1985
MARGARET 02.11.1994
これは、両方のフィールド名が一致するという事実によって可能になります。 このステートメントを使用する場合、両方のフィールドに一致するデータ型と長さがあることを確認する必要があります。 ここでは、以前にLIKEステートメントを使用して行われました。