SAP ABAP 内部テーブル: 作成、読み取り、入力、コピー、削除

内部テーブルとは何ですか?

内部テーブル ABAP で動的に使用するために固定構造からデータを取得するために使用されます。 内部テーブルの各行は同じフィールド構造を持ちます。 内部テーブルの主な用途は、プログラム内のデータベース テーブルのデータを保存し、フォーマットすることです。

ワークエリアとは何ですか?

作業領域は単一行のデータです。 これらは、内部テーブルのいずれかと同じ形式である必要があります。 内部テーブルのデータを一度に XNUMX 行ずつ処理するために使用されます。

内部テーブルと作業領域の違い?

百聞は一見に如かず

内部テーブルと作業領域の違い

内部テーブルの種類

内部テーブルには XNUMX 種類があります。

  1. HEADER行のある内部テーブル
  2. HEADER 行のない内部テーブル。

ヘッダー行のある内部テーブル

  • ここでは、システムが自動的に作業領域を作成します。
  • 作業領域のデータ型は内部テーブルと同じです。
  • この作業領域は HEADER 行と呼ばれます。
  • ここで、テーブルの内容に対するすべての変更やアクションが実行されます。 この結果、レコードをテーブルに直接挿入したり、内部テーブルから直接アクセスしたりすることができます。

ヘッダー行のない内部テーブル :

  • ここでは、テーブルに関連付けられた作業領域はありません。
  • このようなテーブルにアクセスする必要がある場合は、作業領域を明示的に指定します。
  • したがって、これらのテーブルには直接アクセスできません。

内部テーブルの作成

内部テーブルを作成するにはさまざまな方法があります。 一つずつ見ていきましょう -

1.Type ステートメントを使用する

次に、次を使用して内部テーブル itab を作成しましょう。 TYPE ステートメント.

構文は –

Types : begin of line,

column1 type I,

column2 type I,

end of line.

例:

TYPES : begin of line,

empno		type I,

empname(20)   	type c	,

end of line.

TYPES ステートメントは、定義どおりに構造行を作成します。

実際に内部テーブルitabを作成するには、次のコマンドを使用します。

Data itab type line occurs 10.

内部テーブル itab は line の構造で作成されます。内部テーブルの構造を宣言することに加えて、OCCURS 句は主記憶域に保持されるテーブル エントリの数 (この場合は 10) も定義します。 余分なレコードがページング領域に書き出され、パフォーマンスに影響を与える可能性があります

2.別のテーブルを参照する

既存のテーブルを参照して内部テーブルを作成することができます。既存のテーブルは標準のテーブルでも構いません。 SAP テーブル、Z テーブル、または別の内部テーブル。

構文-

Data <f> <type> [with header line].

例 -

DATA itab TYPE line OCCURS 10 with header line.

ここでは、ヘッダー行を含むタイプ line の内部テーブル itab が作成されます。 「ヘッダー行あり」はオプションであることに注意してください。

3.既存の構造を参照することにより

構文-

Data	<f> LIKE <struct> occurs n [with header line].

例 -

DATA itab LIKE sline OCCURS 10.

ここでは、sline と同じ構造を持つテーブル itab が作成されます。

4.新しい構造を作成することにより

次に、独自の構造を持つ内部テーブルを作成してみましょう。 ここではヘッダー行を含むテーブルが作成されています。 初期設定で.

構文–

Data : Begin of <f> occurs <n>,

<component declaration>,

.................................,

End of <f>.

例–

Data : Begin of itab occurs 10,

column1       type I,

column2(4)  type C,

column3      like  mara-ernam,

End of itab.

内部テーブル itab が作成されます

内部テーブルの設定

いくつかの内部テーブルが正常に作成されたので、内部テーブルにレコードを追加する方法を見てみましょう。 テーブルにデータを入力するにはさまざまな方法が利用可能です

1.データを一行ずつ追加

使用可能な最初の方法は、APPEND ステートメントの使用です。

APPEND ステートメントを使用すると、別の作業領域から内部テーブルに XNUMX 行を追加するか、内部テーブルに最初の XNUMX 行を追加できます。

構文–

APPEND [<wa> TO / INITIAL LINE TO] <itable>.

ここが作業エリアまたは、最初の行が内部テーブルに追加されます。

システム変数 SY-TABIX には、追加された行のインデックスが含まれています。

例:

Data: Begin of itab occurs 10,

col1 type C,

col2 type I,

end of itab.

Append initial line to itab.

結果 : ' ' '0'

初期行は、その型の正しい値で初期化された行をテーブルに追加します。 ここで、col1 は文字、col2 は整数です。 次に、最初の行を APPEND して、列のデータ型に関して初期化された行 (つまり、col1 にはスペース、col0 には 2) を追加します。

2.COLLECT文の使い方

COLLECT は、内部テーブルにデータを設定するために使用されるステートメントの別の形式です。 一般に、COLLECT は、一意の標準キーを持つ内部テーブルに行を挿入するときに使用されます。

構文-

COLLECT [<wa> INTO] <itable>.

ヘッダ行のあるテーブルの場合、INTOオプションは省略されます。 追加しようとしているものと同じキーを持つエントリがすでに存在すると仮定すると、新しい行はテーブルに追加されませんが、両方のエントリの数値フィールドが追加され、キーに対応するエントリが XNUMX つだけ存在します。 。 SY-TABIXの値が元のエントリの行に変更されます。 それ以外の場合、COLLECT は APPEND と同様に動作し、SY-TABIX には処理された行のインデックスが含まれます。

3.INSERT ステートメントの使用

INSERT ステートメントは、行/作業領域を内部テーブルに追加します。 INSERT ステートメントの INDEX 句を使用して、新しい行を追加する位置を指定できます。

構文

INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].

ここが作業エリアまたは INITIAL LINE が内部テーブルに挿入されますインデックスで。

内部テーブルのコピー

APPEND LINES または INSERT LINES ステートメントを使用すると、ある内部テーブルの内容を別のテーブルにコピーできます。より簡単な方法は、次の構文のいずれかを使用することです。

MOVE  <itab1> To <itab2>.

OR

<itab1> = <itab2>.

これらはITAB1の内容をITAB2にコピーします。 ヘッダー行のある内部テーブルの場合、作業領域と区別するために [] を使用する必要があります。 したがって、ヘッダー行を含む内部テーブルの内容をコピーするには、構文は次のようになります。

itab1[] = itab2[].

内部テーブルの読み取り

これで、内部テーブルの作成とそこにデータを設定する方法に慣れてきました。 次に、実際にデータを使用する方法、または内部テーブルからデータを取得する方法を見ていきます。

1. ループ - エンドループの使用

内部テーブルにアクセスまたは読み取る方法の XNUMX つは、LOOP-ENDLOOP を使用することです。

構文

LOOP AT <itable> [INTO <wa>]

...................................

ENDLOOP.

ここで LOOP AT ITABLE と言うと、内部テーブル ITABLE が XNUMX 行ずつ読み取られます。 LOOP-ENDLOOP 構造のどの部分でも、その行の列の値にアクセスできます。 SY-SUBRC の値は次のように設定されます。 0XNUMX つのレコードだけが読み取られる場合でも。

2. READの使用

内部テーブルを読み取るもう XNUMX つの方法は、READ ステートメントを使用することです。

構文-

READ TABLE <itable> [INTO <wa>] INDEX <idx>.

このステートメントは、現在の行、またはインデックスで指定された行を読み取ります。 。 SY-TABIX の値は、読み取られた行のインデックスです。 指定されたインデックスを持つエントリが見つかった場合、SY-SUBRC は 0 に設定されます。指定されたインデックスが 0 未満の場合は、実行時エラーが発生します。 指定されたインデックスがテーブル サイズを超える場合、SY-SUBRC は 4 に設定されます。

内部テーブルの削除

内部テーブルから行を削除するにはさまざまな方法があります。

1.ループ内の行を削除します。

これは行を削除する最も簡単な方法です。

構文

DELETE <ITABLE>.

このステートメントはループ内でのみ機能します。 現在の行を削除します。 ループ内の行を条件付きで削除するには、 WHERE句.

2.インデックスを使用して行を削除します。

これは、既知のインデックスにある内部テーブルから行を削除するために使用されます。

構文

DELETE <ITABLE> INDEX <IDX>.

インデックスのある行削除されます。次の行のインデックスは 1 減ります。