コンテンツフレーム起動

テーブルへの行の挿入 文書を SAP ライブラリストラクチャに組み込む

内部テーブルへの行の挿入は、以下のように個別に行うか一括して行うことができます。

単一の行の挿入

内部テーブルに単一の行を追加するには、以下の命令を使用します。

INSERT <line> INTO TABLE <itab>.

<line> は、行データ型と互換性のある作業領域か、INITIAL LINE 式です。テーブルキーの項目に正しいデータ型の項目のデータが書き込まれなければならないため、作業領域は互換性がある必要があります。INITIAL LINE を指定すると、その構造の各項目の正しい初期値が含まれた空白行が挿入されます。

テーブルに一意のキーがあり、そのテーブル内にキーがすでに存在する行を挿入しようとしても、行はテーブルに追加されず、SY-SUBRC 4 に設定されます。テーブルに行が追加された場合は、SY-SUBRC 0 に設定されます。

行は以下のように内部テーブルに追加されます。

        標準テーブル

行は、内部テーブルの末尾にアペンドされます。これは、明示的な APPEND 命令と同じ効果があります。

        ソートテーブル

行は、テーブルキーに従ってテーブルに挿入されます。キーが一意でない場合、重複する行は同じキーを持つ既存のエントリの上に挿入されます。操作の実行時間は既存のテーブルエントリの数と対数比例して増加します。 

        ハッシュテーブル

行は、テーブルキーに従って内部ハッシュ管理に挿入されます。

複数の行の挿入

内部テーブルに複数の行を追加するには、以下の命令を使用します。

INSERT LINES OF <itab1> [FROM <n1>] [TO <n2>] INTO TABLE <itab2>.

<itab1> <itab2> は、互換性のある行データ型を持つテーブルです。単一の行の挿入の場合と同じルールでテーブル <itab1> の行が 1 行ずつ <itab2> に挿入されます。 

<itab1> が索引テーブルの場合は、アペンドするテーブル行の最初と最後の行を <n1> <n2> に指定することができます。

テーブルの複数の行を別のテーブルに挿入するこの方法を使用すると、テーブルのサイズとテーブルを挿入する場所に応じて、ループで 1 行ずつ行を挿入するよりも最大で20 倍処理が速くなります。

 例

DATA: BEGIN OF LINE,
        LAND(3)  TYPE C,
        NAME(10) TYPE C,
        AGE      TYPE I,
        WEIGHT   TYPE P DECIMALS 2,
      END OF LINE.

DATA ITAB LIKE SORTED TABLE OF LINE
          WITH NON-UNIQUE KEY LAND NAME AGE WEIGHT.

LINE-LAND = 'G'.   LINE-NAME   = 'Hans'.
LINE-AGE  = 20.    LINE-WEIGHT = '80.00'.
INSERT LINE INTO TABLE ITAB.

LINE-LAND = 'USA'.LINE-NAME   = 'Nancy'.
LINE-AGE  = 35.    LINE-WEIGHT = '45.00'.
INSERT LINE INTO TABLE ITAB.

LINE-LAND = 'USA'.LINE-NAME   = 'Howard'.
LINE-AGE  = 40.    LINE-WEIGHT = '95.00'.
INSERT LINE INTO TABLE ITAB.

LINE-LAND = 'GB'.  LINE-NAME   = 'Jenny'.
LINE-AGE  = 18.    LINE-WEIGHT = '50.00'.
INSERT LINE INTO TABLE ITAB.

LINE-LAND = 'F'.   LINE-NAME   = 'Michele'.
LINE-AGE  = 30.    LINE-WEIGHT = '60.00'.
INSERT LINE INTO TABLE ITAB.

LINE-LAND = 'G'.   LINE-NAME   = 'Karl'.
LINE-AGE  = 60.    LINE-WEIGHT = '75.00'.
INSERT LINE INTO TABLE ITAB.

LOOP AT ITAB INTO LINE.
   WRITE: / LINE-LAND, LINE-NAME, LINE-AGE, LINE-WEIGHT.
ENDLOOP.

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

F   Michele            30         60.00
G   Hans               20         80.00
G   Karl               60         75.00
GB  Jenny              18         50.00
USA Howard             40         95.00
USA Nancy              35         45.00

この例では、ソート内部テーブルに 6 つのエントリが書き込まれ ます。

 例

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

DATA: ITAB LIKE STANDARD TABLE OF LINE,
      JTAB LIKE SORTED TABLE OF LINE
           WITH NON-UNIQUE KEY COL1 COL2.

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

   LINE-COL1 = SY-INDEX.LINE-COL2 = SY-INDEX ** 3.
  APPEND LINE TO JTAB.

ENDDO.

INSERT LINES OF ITAB INTO TABLE JTAB.

LOOP AT JTAB INTO LINE.
   WRITE: / SY-TABIX, LINE-COL1, LINE-COL2.
ENDLOOP.

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

         1         1          1
         2         1          1
         3         2          4
         4         2          8
         5         3          9
         6         3         27

この例では、行データ型が同じでテーブルタイプが異なる 2 つの内部テーブルが作成されます。それぞれ、3 行が書き込まれます。その後、ITAB がソートされて、ソートテーブル JTAB に挿入されます。

 

 

 

コンテンツフレーム終了