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ステートメントを使用して行われました。