コンテンツフレーム起動

フィールドシンボルを使用したアクセス 文書を SAP ライブラリストラクチャに組み込む

READ を使用してエントリを読み込む場合や、LOOP 内でエントリを読み込む場合は、以下のオプションを使用して読み込んだエントリをフィールドシンボルに割り当てることができます。

... ASSIGNING <FS>

フィールドシンボル <FS> は、メモリ内の割り当てられた行を直接指します。行の内容を間接的にしか取得できない作業領域とは異なり、フィールドシンボルでは、テーブルエントリを直接読み込んで変更することができます。

フィールドシンボルを使用して内部テーブルにアクセスするときは、ソートテーブルやハッシュテーブルのキー項目の内容は変更できないことに注意してください。フィールドシンボルを使用してキー項目に新しい値を割り当てようとすると、実行時エラーが発生します。フィールドシンボルに SUM 命令を使用することはできません。この命令は常に作業領域に適用されるためです。

フィールドシンボルの利点

内部テーブルから読み込むときに、作業領域にテーブル行をコピーするためのオーバーヘッドがありません。MODIFY 命令を使用して内部テーブルを変更するときに、まず作業領域に値を書き込み、それからその値を内部テーブルに割り当てる必要があります。代わりにフィールドシンボルを使用すると、このオーバーヘッドがありません。大きな内部テーブルや複雑な内部テーブルを処理する場合は、これによってパフォーマンスが向上することがあります。さらに、ネストされた内部テーブルの処理が容易になります。

READ のオーバーヘッド

フィールドシンボルを使用して内部テーブルにアクセスするときに、内部オーバーヘッドが発生します。フィールドシンボルに対する READ 命令のあと、割り当て処理が登録されるためです。フィールドシンボルが指しているテーブル行を削除するときに、フィールドシンボルが未定義の領域を指さないようするために、フィールドシンボルの割り当てが解除されます。

個別のテーブル行を読み込む場合に、行幅が 1000 バイト以上のテーブルに対しては READ 命令でフィールドシンボルを使用する価値があります。MODIFY 命令を使用して行を変更する場合も、100 バイト以上の行幅に対してはフィールドシンボルを使用する価値があります。

LOOP のオーバーヘッド

ループ処理でフィールドシンボルを使用することによって発生するオーバーヘッドを最小限に抑えるために、フィールドシンボルへの各現在行の割り当ては登録されません。代わりに、テーブルの行とフィールドシンボルの間の一般割り当てが登録されます。ループが終了すると、最後のループパスで処理された行がフィールドシンボルに割り当てられます。

したがって、10 行程度の内部テーブルに対してはLOOP でフィールドシンボルを使用する価値があります。しかし、ループ内でフィールドシンボルを別の項目に割り当て直したり、完全に割り当てを解除したりすることはできません。同じフィールドシンボルに対する ASSIGN 命令、UNASSIGN 命令、または ASSIGNING オプションをループに含めると、実行時エラーが発生します。 

 例

DATA: BEGIN OF LINE,
         COL1 TYPE I,
         COL2 TYPE I,
      END OF LINE.

DATA ITAB LIKE SORTED TABLE OF LINE WITH UNIQUE KEY COL1.

FIELD-SYMBOLS <FS> LIKE LINE OF ITAB.

DO 4 TIMES.
   LINE-COL1 = SY-INDEX.
   LINE-COL2 = SY-INDEX ** 2.
  APPEND LINE TO ITAB.

ENDDO.

READ TABLE ITAB WITH TABLE KEY COL1 = 2 ASSIGNING <FS>.
<FS>-COL2 = 100.

READ TABLE ITAB WITH TABLE KEY COL1 = 3 ASSIGNING <FS>.
DELETE ITAB INDEX 3.

IF <FS> IS ASSIGNED.
   WRITE '<FS> is assigned!'.
ENDIF.

LOOP AT ITAB ASSIGNING <FS>.
   WRITE: / <FS>-COL1, <FS>-COL2.
ENDLOOP.

出力は以下のようになります。

        1         1

         2       100

         4        16

この例では、ソートテーブル ITAB 4 行が書き込まれます。2 番目の行が同じデータ型を持つフィールドシンボル <FS> に割り当てられ、そのフィールドシンボルを使用して変更されます。3 番目の行が <FS> に割り当てられてから、削除されます。したがって、IF 命令内の論理式は偽です。<FS> は、LOOP 内でテーブル行を表示するために使用されます。その後、<FS> はテーブルの 3 番目の行を指します。 

 

 

 

 

 

 

コンテンツフレーム終了