!--a11y-->

他のデータオブジェクトと同様に、MOVE 命令 で内部テーブルをオペランドとして使用することができます。
MOVE <itab1> TO <itab2>.
または、以下の同等の命令でもオペランドとして使用することができます。
<itab2> = <itab1>.
どちらのオペランドも互換性があるか、変換可能でなければなりません。これらの命令では、ネストしている内部テーブル上のデータを含む、テーブル<itab1> の内容全体がテーブル <itab2> に割り当てられます。割り当て先のテーブルの元の内容が上書きされます。
ヘッダ行のある内部テーブルを使用している場合は、ヘッダ行とテーブル本体の名前は同じであるということに注意してください。割り当てでテーブルの本体をアドレス指定する場合は、テーブル名の後ろに 2 つの角括弧 ([ ]) を記述してください。

DATA: BEGIN OF line,
col1(1) TYPE c,
col2(1) TYPE c,
END OF line.
DATA: etab LIKE TABLE OF
line WITH HEADER LINE,
ftab LIKE TABLE OF line.
line-col1 = 'A'.line-col2 = 'B'.
APPEND line TO etab.
MOVE etab[] TO ftab.
LOOP AT ftab INTO
line.
WRITE: / line-col1, line-col2.
ENDLOOP.
出力は以下のようになります。
A B
この例では、構造 LINE の行データ型を持つ 2 つの標準テーブル、ETAB および FTAB が作成されます。ETAB にはヘッダ行があります。APPEND 命令を使用して ETAB に 1 行ずつデータが書き込まれたあと、内容全体が FTAB に割り当てられます。命令内で角括弧が使用されていることに注意してください。

DATA: ftab TYPE SORTED
TABLE OF f
WITH NON-UNIQUE
KEY table_line,
itab TYPE HASHED TABLE OF i
WITH UNIQUE KEY
table_line,
fl TYPE f.
DO 3
TIMES.
INSERT sy-index INTO TABLE itab.
ENDDO.
ftab = itab.
LOOP AT ftab INTO
fl.
WRITE: / fl.
ENDLOOP.
出力は以下のようになります。
1.000000000000000E+00
2.000000000000000E+00
3.000000000000000E+00
FTAB は、非一意のキーを持つ行データ型 F のソートテーブルです。ITAB は、一意のキーを持つ行データ型 I のソートテーブルです。行データ型 ( したがって、テーブル全体) は変換可能です。したがって、ITAB の内容を FTAB に割り当てることができます。非ソートテーブル ITAB をソートテーブル FTAB に割り当てると、内容は FTAB のキーによって自動的にソートされます。

ユニコードシステムでは、以下の変換を行うことはできません。
DATA: BEGIN OF iline,
num TYPE i,
END OF iline,
BEGIN OF fline,
num TYPE f,
END OF fline,
itab LIKE TABLE OF iline,
ftab LIKE TABLE OF fline.
DO 3
TIMES.
iline-num = sy-index.
APPEND iline-num TO itab.
ENDDO.
ftab = itab.
loop AT ftab INTO
fline.
WRITE: / fline-num.
ENDLOOP.
ユニコード以外のシステムでは、出力は以下のようになります。
6.03823403895813E-154
6.03969074613219E-154
6.04114745330626E-154
この場合、内部テーブル ITAB および FTAB の行データ型は、それぞれ I 型または F 型のコンポーネントを 1 つ持つ構造です。この 2 つの行データ型は変換可能ですが、互換性はありません。したがって、ITAB を FTAB に割り当てると、テーブル ITAB の内容は C 型の項目に変換され、その後 FTAB に書き込まれます。転送されたデータは F 型の項目として解釈されるため、結果は無意味なものとなります。ユニコードシステムでは、数値項目を C 型の項目に変換することはできません。