Recherche…


Types de tables internes

DATA: <TABLE NAME> TYPE <SORTED|STANDARD|HASHED> TABLE OF <TYPE NAME> 
      WITH <UNIQUE|NON-UNIQUE> KEY <FIELDS FOR KEY>.

Tableau standard

Ce tableau contient toutes les entrées stockées de manière linéaire et les enregistrements sont accessibles de manière linéaire. Pour les grandes tailles de tables, l'accès aux tables peut être lent.

Table triée

Nécessite l'addition WITH UNIQUE | NON-UNIQUE KEY . La recherche est rapide en raison d'une recherche binaire. Les entrées ne peuvent pas être ajoutées à cette table car elles risquent de rompre l'ordre de tri. Elles sont donc toujours insérées à l'aide du mot clé INSERT .

Table hachée

Nécessite l'addition WITH UNIQUE | NON-UNIQUE KEY . Utilise un algorithme de hachage propriétaire pour conserver les paires clé-valeur. Théoriquement, les recherches peuvent être aussi lentes que la table STANDARD , mais en pratique, elles sont plus rapides qu'une table SORTED prend un temps constant, quelle que soit la taille de la table.

Déclaration des tables internes ABAP

Déclaration de table interne basée sur la définition du type local

" Declaration of type
TYPES: BEGIN OF ty_flightb,
         id        TYPE fl_id,
         dat       TYPE fl_date,
         seatno    TYPE fl_seatno,
         firstname TYPE fl_fname, 
         lastname  TYPE fl_lname,
         fl_smoke  TYPE fl_smoker,
         classf    TYPE fl_class,
         classb    TYPE fl_class,
         classe    TYPE fl_class,
         meal      TYPE fl_meal,
         service   TYPE fl_service,
         discout   TYPE fl_discnt,
       END OF lty_flightb.

" Declaration of internal table
DATA t_flightb TYPE STANDARD TABLE OF ty_flightb.

Déclaration basée sur la table de base de données

DATA t_flightb TYPE STANDARD TABLE OF flightb.

Déclaration de tableau interne en ligne

Nécessite la version ABAP> 7.4

TYPES t_itab TYPE STANDARD TABLE OF i WITH EMPTY KEY.

DATA(t_inline) = VALUE t_itab( ( 1 ) ( 2 ) ( 3 ) ).

Déclaration de table interne avec lignes d'en-tête

Dans ABAP, il y a des tables avec des lignes d'en-tête et des tables sans lignes d'en-tête. Les tableaux comportant des lignes d'en-tête sont un concept plus ancien et ne doivent pas être utilisés dans de nouveaux développements.

Table interne: Table standard avec / sans ligne d'en-tête

Ce code déclare la table i_compc_all avec la structure existante de compc_str .

DATA: i_compc_all TYPE STANDARD TABLE OF compc_str WITH HEADER LINE.
DATA: i_compc_all TYPE STANDARD TABLE OF compc_str.

Table interne: Table hachée avec / sans ligne d'en-tête

DATA: i_map_rules_c TYPE HASHED TABLE OF /bic/ansdomm0100 WITH HEADER LINE
DATA: i_map_rules_c TYPE HASHED TABLE OF /bic/ansdomm0100

Déclaration d'une zone de travail pour les tables sans en-tête

Une zone de travail (généralement abrégée wa ) a exactement la même structure que la table, mais ne peut contenir qu'une seule ligne (une WA est la structure d'une table avec une seule dimension).

DATA: i_compc_all_line LIKE LINE OF i_compc_all.

Lire, écrire et insérer dans des tables internes

Lire, écrire et insérer dans des tables internes avec une ligne d’en-tête:

" Read from table with header (using a loop):
LOOP AT i_compc_all.              " Loop over table i_compc_all and assign header line
  CASE i_compc_all-ftype.         " Read cell ftype from header line from table i_compc_all 
    WHEN 'B'.                     " Bill-to customer number transformation
      i_compc_bil = i_compc_all.  " Assign header line of table i_compc_bil with content of header line i_compc_all
      APPEND i_compc_bil.         " Insert header line of table i_compc_bil into table i_compc_bil
    " ... more WHENs
  ENDCASE.
ENDLOOP.

Rappel: les tables internes avec des lignes d'en-tête sont interdites dans les contextes orientés objet. L'utilisation de tables internes sans lignes d'en-tête est toujours recommandée.

Lire, écrire et insérer dans des tables internes sans ligne d’en-tête:

" Loop over table i_compc_all and assign current line to structure i_compc_all_line
LOOP AT i_compc_all INTO i_compc_all_line.      
  CASE i_compc_all_line-ftype.                " Read column ftype from current line (which as assigned into i_compc_all_line)
    WHEN 'B'.                                 " Bill-to customer number transformation
      i_compc_bil_line = i_compc_all_line.    " Copy structure
      APPEND i_compc_bil_line TO i_compc_bil. " Append structure to table
    " more WHENs ...
  ENDCASE.
ENDLOOP.


" Insert into table with Header:
INSERT TABLE i_sap_knb1.                      " insert into TABLE WITH HEADER: insert table header into it's content
insert i_sap_knb1_line into table i_sap_knb1. " insert into HASHED TABLE: insert structure i_sap_knb1_line into hashed table i_sap_knb1
APPEND p_t_errorlog_line to p_t_errorlog.     " insert into STANDARD TABLE: insert structure / wa p_t_errorlog_line into table p_t_errorlog_line


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow