作業領域として構造を使用して内部テーブルを反復する方法を学習しました。この手法を使用すると、内部テーブルから作業領域にデータがコピーされます。その後、作業領域の内容を変更してから、MODIFY 命令を使用して内部テーブルにコピーして戻します。

この手法を使用して大きな内部テーブルを処理すると、データをコピーする手間がかかるため、パフォーマンスの問題が発生するリスクがあります。作業領域をフィールドシンボルに置き換えることで、これらのコストを削減することができます。
フィールドシンボルによる作業領域の置換
フィールドシンボルはポインタです。ポインタは、別のオブジェクトのメモリアドレスを認識し、そのオブジェクトを操作できるデータオブジェクトです。内部テーブルの場合、ポインタを使用すると、最初に作業領域にコピーしなくても、内部テーブルの行をアドレスすることができます。作業領域ではなくテーブル行を直接使用するため、変更を内部テーブルにコピーし直す必要はありません。

フィールドシンボルを定義するには、FIELD-SYMBOLS 命令を使用して、フィールドシンボルに名称を割り当てます。名前は山括弧で囲む必要があります。また、フィールドシンボルにタイプを割り当てます。フィールドシンボルを使用して内部テーブルを処理する場合は、作業領域と同様に、内部テーブルの行データ型でフィールドシンボルを定義します。
内部テーブルに対するループでフィールドシンボルを使用するには、LOOP 命令で ASSIGNING オプションを使用します。各ループパスで、ポインタが内部テーブルの対応する行をポイントするようになり、その内容を直接変更することができます。フィールドシンボルには内部テーブルの行データ型があるため、対応する構造と同様に処理することができます。フィールドシンボル名の後に、ダッシュを入力してから、変更するフィールドを入力することができます。
構造ではなく内部テーブルを直接使用しているため、MODIFY 命令は必要ありません。データのコピーを回避することで、ループのパフォーマンスを大幅に改善することができます。
実行時間比較

ここでは、MODIFY 命令を使用して内部テーブルが更新され、フィールドシンボルを使用して別の内部テーブルが更新された実行時間分析の結果を確認することができます。この場合、フィールドシンボルは modify 文よりも 40% 時間が短くなります。原則として、作業領域ではなくフィールドシンボルを使用して内部テーブルを更新すると、実行時間の 25 ~ 40% が節約されます。読込操作のパフォーマンス向上は小さくなります。