SAP ABAP - Lecture des tables internes

Nous pouvons lire les lignes d'une table en utilisant la syntaxe suivante de l'instruction READ TABLE -

READ TABLE <internal_table> FROM <work_area_itab>.

Dans cette syntaxe, l'expression <work_area_itab> représente une zone de travail compatible avec le type de ligne de la table <internal_table>. Nous pouvons spécifier une clé de recherche, mais pas une clé de table, dans l'instruction READ en utilisant la clause WITH KEY, comme indiqué dans la syntaxe suivante -

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

Ici, toute la ligne de la table interne est utilisée comme search key. Le contenu de toute la ligne du tableau est comparé au contenu du champ <internal_tab_field>. Si les valeurs du champ <internal_tab_field> ne sont pas compatibles avec le type de ligne de la table, ces valeurs sont converties en fonction du type de ligne de la table. La clé de recherche vous permet de rechercher des entrées dans des tables internes qui n'ont pas de type de ligne structuré, c'est-à-dire où la ligne est un champ unique ou un type de table interne.

La syntaxe suivante de l'instruction READ est utilisée pour spécifier une zone de travail ou un symbole de champ à l'aide de la clause COMPARING -

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

Lorsque la clause COMPARING est utilisée, les champs de table spécifiés <F1>, <F2> .... <Fn> de type ligne structurée sont comparés aux champs correspondants de l'espace de travail avant d'être transportés. Si la clause ALL FIELDS est spécifiée, le système SAP compare tous les composants. Lorsque le système SAP trouve une entrée sur la base d'une clé, la valeur de la variable SY-SUBRC est mise à 0. De plus, la valeur de la variable SY-SUBRC est mise à 2 ou 4 si le contenu de la comparaison ne sont pas les mêmes ou si le système SAP ne parvient pas à trouver une entrée. Cependant, le système SAP copie l'entrée dans la zone de travail cible chaque fois qu'il trouve une entrée, quel que soit le résultat de la comparaison.

Exemple

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.

Le code ci-dessus produit la sortie suivante -

SY-SUBRC =    2 

4         9

Dans l'exemple ci-dessus, mytable est une table interne de type table hachée, avec Record1 comme zone de travail et ColP comme clé unique. Initialement, mytable contient six lignes, où le champ ColP contient les valeurs de la variable SY-INDEX et le champ ColQ contient les valeurs (SY-INDEX + 5).

La zone de travail Record1 contient respectivement 4 et 12 comme valeurs pour les champs ColP et ColQ. L'instruction READ lit la ligne de la table après avoir comparé la valeur du champ de clé ColP avec la valeur de la zone de travail Record1 à l'aide de la clause COMPARING, puis copie le contenu de la ligne de lecture dans la zone de travail. La valeur de la variable SY-SUBRC est affichée comme 2 car lorsque la valeur dans le champ ColP est 4, la valeur dans ColQ n'est pas 12, mais 9.