Sap-abap-reading-internal-tables

提供:Dev Guides
移動先:案内検索

SAP ABAP-内部テーブルの読み取り

私たちは、READ TABLEステートメントの次の構文を使用して、テーブルの行を読み取ることができます-

READ TABLE <internal_table> FROM <work_area_itab>.

この構文では、<work_area_itab>式は、<internal_table>テーブルの行タイプと互換性のある作業領域を表します。 次の構文に示すように、WITH KEY句を使用して、READステートメント内で検索キーを指定できますが、テーブルキーは指定できません-

READ TABLE <internal_table> WITH KEY = <internal_tab_field>.

ここでは、内部テーブルの行全体が*検索キー*として使用されます。 テーブルの行全体の内容は、<internal_tab_field>フィールドの内容と比較されます。 <internal_tab_field>フィールドの値がテーブルの行タイプと互換性がない場合、これらの値はテーブルの行タイプに従って変換されます。 検索キーを使用すると、構造化された行タイプを持たない、つまり、行が単一フィールドまたは内部テーブルタイプである内部テーブルのエントリを検索できます。

READステートメントの次の構文は、COMPARING句を使用して作業領域またはフィールドシンボルを指定するために使用されます-

READ TABLE <internal_table> <key> INTO <work_area_itab>
   [COMPARING <F1> <F2>...<Fn>].

COMPARING句を使用すると、構造化されたラインタイプの指定されたテーブルフィールド<F1>、<F2> …​. <Fn>は、輸送される前に作業領域の対応するフィールドと比較されます。 ALL FIELDS句が指定されている場合、SAPシステムはすべてのコンポーネントを比較します。 SAPシステムがキーに基づいてエントリを検出すると、SY-SUBRC変数の値は0に設定されます。 さらに、比較されるフィールドの内容が同じでない場合、またはSAPシステムがエントリを見つけることができない場合、SY-SUBRC変数の値は2または4に設​​定されます。 ただし、SAPシステムは、比較の結果に関係なく、エントリが見つかるたびにエントリをターゲット作業領域にコピーします。

REPORT  ZREAD_DEMO.
*/Creating an internal table
DATA: BEGIN OF Record1,
ColP TYPE I,
ColQ TYPE I,
END OF Record1.

DATA mytable LIKE HASHED TABLE OF Record1 WITH UNIQUE KEY ColP.
DO 6 Times.
Record1-ColP = SY-INDEX.
Record1-ColQ = SY-INDEX + 5.
INSERT Record1 INTO TABLE mytable.
ENDDO.

Record1-ColP = 4.
Record1-ColQ = 12.
READ TABLE mytable FROM Record1 INTO Record1 COMPARING ColQ.

WRITE: 'SY-SUBRC =', SY-SUBRC.
SKIP.
WRITE:/Record1-ColP, Record1-ColQ.

上記のコードは、次の出力を生成します-

SY-SUBRC =    2

4         9

上記の例では、mytableはハッシュテーブル型の内部テーブルで、Record1が作業領域、ColPが一意のキーです。 最初、mytableには6行が入力されます。ColPフィールドにはSY-INDEX変数の値が含まれ、ColQフィールドには(SY-INDEX + 5)値が含まれます。

Record1作業領域には、ColPおよびColQフィールドの値としてそれぞれ4および12が入力されます。 READステートメントは、COMPARING句を使用してColPキーフィールドの値とRecord1作業領域の値を比較した後、テーブルの行を読み取り、作業領域の読み取り行の内容をコピーします。 SY-SUBRC変数の値は2として表示されます。これは、ColPフィールドの値が4の場合、ColQの値は12ではなく9であるためです。