Types ITAB en ABAP #
Itab type table of #
Objectifs #
- Comprendre ce qu’est une
TABLE INTERNEen ABAP - Déclarer un type de structure avec TYPES
- Créer une variable de type structure pour les lignes
- Créer une variable de type
TABLE INTERNE - Remplir une
TABLE INTERNEavec des données structurées - Assimiler l’analogie entre
TABLE INTERNEet carnet d’adresses - Appliquer les bonnes pratiques pour manipuler les tables internes
Définition #
Une
TABLE INTERNEest un conteneur temporaire de données dans un programme ABAP.
Elle permet de stocker plusieurs lignes de données structurées, chaque ligne pouvant être uneSTRUCTUREou un simple type.
Imaginez une
TABLE INTERNEcomme un carnet d’adresses
- Chaque page correspond à une ligne de table (une
STRUCTURE)- Chaque champ sur la page correspond à un champ de la
STRUCTURE(nom, prénom, téléphone…)- Vous pouvez ajouter ou supprimer des pages sans toucher aux autres
Les
TABLES INTERNESsont uniquement en mémoire pendant l’exécution du programme, elles ne sont pas persistantes comme une table en base de données.
Déclaration #
1️⃣ Définir un type de structure pour une ligne :
TYPES: BEGIN OF ty_person,
nom TYPE char20,
prenom TYPE char20,
age TYPE i,
ville TYPE char20,
END OF ty_person.
2️⃣ Déclarer la TABLE INTERNE :
DATA: lt_persons TYPE TABLE OF ty_person.
3️⃣ Déclarer une structure temporaire pour ajouter des lignes :
DATA: ls_person TYPE ty_person.
" ou encore
DATA: ls_person_2 LIKE LINE OF lt_persons.
Le TYPES
ty_person= fiche d’identité
La TABLElt_persons= carnet d’adresses
La STRUCTUREls_person= page vide à remplir avant de l’insérer
Affectation de valeur et insertion d’une ligne dans une table #
ls_person-nom = 'Dupont'.
ls_person-prenom = 'Jean'.
ls_person-age = 35.
ls_person-ville = 'Paris'.
APPEND ls_person TO lt_persons.
On remplit une fiche (
STRUCTURE) et on la colle dans le carnet (TABLE INTERNE).
Toujours utiliser une
STRUCTUREtemporaire pour manipuler les lignes avant de les insérer dans la table.
Lorsque tu alimentes une table avec plusieurs lignes de manière automatique (dans une boucle par exemple), n’oublie pas de CLEAR la structure après tout ajout de ligne dans la table (ou avant toute affectation de valeur).
Bonnes pratiques #
| Bonne pratique | Explication |
|---|---|
| Définir une structure pour chaque ligne | Clarifie et standardise les données |
Utiliser APPEND pour ajouter des lignes |
Maintient l’ordre et l’intégrité de la table |
| Nommer tables et structures de façon explicite | Lecture et maintenance facilitées |
| Manipuler les lignes via une structure temporaire | Séparation claire entre ligne et table |
| CLEAR la structure avant affectation ou après ajout | Evite d’avoir des données erronées |
Exercices – Déclaration et insertion #
1 – Créer une table interne de livres #
Déclarer une
TABLE INTERNElt_livresavec uneSTRUCTUREty_livrecontenant
- titre (CHAR30)
- auteur (CHAR30)
- annee (I)
- genre (CHAR20)
Ajouter une ligne à la table.
SOLUTION
TYPES: BEGIN OF ty_livre,
titre TYPE char30,
auteur TYPE char30,
annee TYPE i,
genre TYPE char20,
END OF ty_livre.
DATA: lt_livres TYPE TABLE OF ty_livre,
ls_livre TYPE ty_livre.
ls_livre-titre = '1984'.
ls_livre-auteur = 'George Orwell'.
ls_livre-annee = 1949.
ls_livre-genre = 'Dystopie'.
APPEND ls_livre TO lt_livres.
2 – Ajouter une deuxième ligne #
Ajouter un deuxième livre dans la même table
lt_livres.
SOLUTION
ls_livre-titre = 'Le Petit Prince'.
ls_livre-auteur = 'Antoine de Saint-Exupéry'.
ls_livre-annee = 1943.
ls_livre-genre = 'Conte'.
APPEND ls_livre TO lt_livres.
3 – Créer une table de clients #
Déclarer une
TABLE INTERNE lt_clientsavec uneSTRUCTURE ty_clientcontenant
- nom (CHAR20)
- prenom (CHAR20)
- age (I)
- ville (CHAR20)
Ajouter deux clients différents.
SOLUTION
TYPES: BEGIN OF ty_client,
nom TYPE char20,
prenom TYPE char20,
age TYPE i,
ville TYPE char20,
END OF ty_client.
DATA: lt_clients TYPE TABLE OF ty_client,
ls_client TYPE ty_client.
ls_client-nom = 'Martin'.
ls_client-prenom = 'Claire'.
ls_client-age = 28.
ls_client-ville = 'Lyon'.
APPEND ls_client TO lt_clients.
ls_client-nom = 'Bernard'.
ls_client-prenom = 'Paul'.
ls_client-age = 45.
ls_client-ville = 'Marseille'.
APPEND ls_client TO lt_clients.
Résumé #
- Une
TABLE INTERNEcontient plusieurs lignes de données structurées.- Chaque ligne est une
STRUCTURE, manipulée via uneVARIABLEtemporaire avant insertion.- Schéma général :
TYPES→DATA structure→DATA table→APPEND TO table.[!TIP] carnet d’adresses pour la table, fiche d’identité pour chaque ligne.
[!IMPORTANT] utiliser des
STRUCTURESclaires, manipuler les lignes via uneSTRUCTUREtemporaire et éviter les header lines.
Itab type standard table of #
Objectifs #
- Comprendre la différence entre
TYPE TABLE OFetTYPE STANDARD TABLE OF - Savoir déclarer un type standard de table interne
- Assimiler le comportement spécifique d’une table standard (index implicite, ordre d’insertion)
- Identifier les cas d’usage pertinents
Définition #
Une table interne standard (
TYPE STANDARD TABLE OF) est une table indexée automatiquement par ABAP.
Chaque ligne est accessible par un indice numérique (1, 2, 3, …), représentant l’ordre d’insertion.
- L’ordre d’insertion détermine l’ordre de lecture.
- L’accès à une ligne spécifique nécessite souvent une recherche séquentielle (instruction
READ TABLE).- Une table standard n’impose pas d’unicité sur les lignes.
Type de table interne Indexée Accès direct Doublons autorisés Tri automatique STANDARD TABLE Oui Non Oui Non SORTED TABLE Oui Oui (clé) Non (clé unique) Oui HASHED TABLE Non Oui (clé) Non (clé unique) Non
Déclaration #
1️⃣ Définir un type de ligne #
TYPES: BEGIN OF ty_person,
nom TYPE char20,
prenom TYPE char20,
age TYPE i,
ville TYPE char20,
END OF ty_person.
2️⃣ Déclarer une table standard #
DATA: lt_persons TYPE STANDARD TABLE OF ty_person.
3️⃣ Déclarer une structure temporaire #
DATA: ls_person TYPE ty_person.
ty_person→ modèle de fiche d’identitéls_person→ fiche en cours de remplissagelt_persons→ carnet de fiches numérotées automatiquement
Insertion d’une ligne #
ls_person-nom = 'Dupont'.
ls_person-prenom = 'Jean'.
ls_person-age = 35.
ls_person-ville = 'Paris'.
APPEND ls_person TO lt_persons.
L’instruction
APPENDajoute la ligne à la fin de la table.
La table standard conserve l’ordre chronologique d’insertion.
Le
APPENDcrée implicitement un nouvel index pour la ligne ajoutée.
Accès aux données #
Lecture séquentielle #
- BOUCLE avec stockage des données de la ligne lue dans une structure déjà déclarée en amont
LOOP AT lt_persons INTO ls_person.
WRITE: / ls_person-nom, ls_person-prenom.
ENDLOOP.
- BOUCLE avec stockage des données de la ligne lue dans une structure déclarée dynamiquement
LOOP AT lt_persons INTO DATA(ls_person).
WRITE: / ls_person-nom, ls_person-prenom.
ENDLOOP.
- BOUCLE avec stockage des données de la ligne lue dans un field-symbol déjà déclaré en amont
LOOP AT lt_persons ASSIGNING <lfs_person>.
WRITE: / ls_person-nom, ls_person-prenom.
ENDLOOP.
- BOUCLE avec stockage des données de la ligne lue dans un field-symbol déclaré dynamiquement
LOOP AT lt_persons ASSIGNING FIELD-SYMBOL(<lfs_person>).
WRITE: / ls_person-nom, ls_person-prenom.
ENDLOOP.
Lecture par index #
READ TABLE lt_persons INDEX 2 INTO ls_person.
IF sy-subrc = 0.
WRITE: / 'Deuxième personne :', ls_person-nom.
ENDIF.
Une table standard ne garantit pas de tri ou d’accès direct par clé.
L’accès se fait par index ou recherche séquentielle.
Bonnes pratiques #
| Bonne pratique | Explication |
|---|---|
Utiliser TYPE STANDARD TABLE OF pour les listes simples |
Idéal pour traitements linéaires, sans clé logique |
| Définir un type clair pour les lignes | Simplifie la maintenance et les vérifications |
| Éviter les recherches répétées par clé | Préférer SORTED TABLE pour cela |
Nommer les objets (ty_, lt_, ls_) de façon cohérente |
Améliore la lisibilité |
Tables standard → manipulation séquentielle (boucles, appends, tri manuel).
Exemples #
Exemple 1 – Table de livres #
TYPES: BEGIN OF ty_livre,
titre TYPE char30,
auteur TYPE char30,
annee TYPE i,
genre TYPE char20,
END OF ty_livre.
DATA: lt_livres TYPE STANDARD TABLE OF ty_livre,
ls_livre TYPE ty_livre.
ls_livre-titre = '1984'.
ls_livre-auteur = 'George Orwell'.
ls_livre-annee = 1949.
ls_livre-genre = 'Dystopie'.
APPEND ls_livre TO lt_livres.
ls_livre-titre = 'Le Petit Prince'.
ls_livre-auteur = 'Antoine de Saint-Exupéry'.
ls_livre-annee = 1943.
ls_livre-genre = 'Conte'.
APPEND ls_livre TO lt_livres.
Exemple 2 – Tri manuel d’une table standard #
SORT lt_livres BY auteur.
Une table standard n’est pas triée automatiquement.
SORTest nécessaire pour organiser les lignes par champ.
Exercices #
1 – Table de clients #
Déclarer une table standard
lt_clientsavec une structurety_clientcontenant
- nom (CHAR20)
- prenom (CHAR20)
- age (I)
- ville (CHAR20)
Ajouter deux clients et afficher leurs noms.
SOLUTION
TYPES: BEGIN OF ty_client,
nom TYPE char20,
prenom TYPE char20,
age TYPE i,
ville TYPE char20,
END OF ty_client.
DATA: lt_clients TYPE STANDARD TABLE OF ty_client,
ls_client TYPE ty_client.
ls_client-nom = 'Martin'.
ls_client-prenom = 'Claire'.
ls_client-age = 28.
ls_client-ville = 'Lyon'.
APPEND ls_client TO lt_clients.
ls_client-nom = 'Bernard'.
ls_client-prenom = 'Paul'.
ls_client-age = 45.
ls_client-ville = 'Marseille'.
APPEND ls_client TO lt_clients.
Résumé #
TYPE STANDARD TABLE OF→ table interne indexée automatiquement.- Ordre d’insertion conservé.
- Accès séquentiel ou par index.
- Pas de tri ni de clé unique par défaut.
- Idéale pour listes simples ou traitements linéaires.
Itab type sorted table of #
Objectifs #
- Comprendre la structure et le comportement d’une table triée (
TYPE SORTED TABLE OF) - Savoir déclarer une clé obligatoire avec
WITH UNIQUE KEY - Identifier les avantages et contraintes de performance
- Maîtriser l’insertion, la lecture et le tri automatique
- Appliquer les bonnes pratiques d’utilisation
Définition #
Une SORTED TABLE est une table interne triée automatiquement selon une clé définie lors de la déclaration.
L’ordre est garanti et un index interne est maintenu pour les recherches par clé.
Un annuaire trié par nom : chaque fiche est automatiquement insérée à la bonne position.
Impossible d’avoir deux fiches avec le même nom si la clé est unique.
- Une clé (
WITH UNIQUE KEYouWITH NON-UNIQUE KEY) est obligatoire.- L’insertion est automatiquement triée.
- Les recherches sont optimisées (accès dichotomique).
- Les insertions massives sont plus coûteuses qu’avec une
STANDARD TABLE.
Déclaration #
1️⃣ Définir une structure de ligne #
TYPES: BEGIN OF ty_person,
id TYPE char10,
nom TYPE char20,
age TYPE i,
END OF ty_person.
2️⃣ Déclarer une table triée avec la clé unique #
DATA: lt_persons TYPE SORTED TABLE OF ty_person
WITH UNIQUE KEY id.
3️⃣ Déclarer la structure de travail #
DATA: ls_person TYPE ty_person.
SORTED TABLEmaintient un ordre trié automatique.WITH UNIQUE KEYgarantit l’unicité sur le champ clé.INSERTinsère la ligne au bon endroit, selon la clé.
Insertion d’une ligne #
ls_person-id = '0003'.
ls_person-nom = 'Martin'.
ls_person-age = 28.
INSERT ls_person INTO TABLE lt_persons.
ls_person-id = '0001'.
ls_person-nom = 'Dupont'.
ls_person-age = 45.
INSERT ls_person INTO TABLE lt_persons.
Peu importe l’ordre du code, les lignes seront triées par la clé (
id).
APPENDne doit jamais être utilisé dans uneSORTED TABLE.- Seule l’instruction
INSERTmaintient le tri automatique.- Si une clé dupliquée est insérée → erreur d’exécution (
sy-subrc ≠ 0).
Bonnes pratiques #
| Bonne pratique | Explication |
|---|---|
| Toujours définir la clé à la déclaration | Condition obligatoire pour le tri |
Utiliser INSERT pour maintenir le tri |
APPEND casse l’ordre logique |
Préférer SORTED TABLE pour lectures fréquentes |
Accès par clé optimisé |
| Éviter pour insertions massives désordonnées | Coût CPU du réordonnancement |
Une
SORTED TABLEest idéale lorsque l’ordre et la recherche par clé sont prioritaires, pas la vitesse d’insertion.
Exemples #
Exemple 1 – Table de produits triée par id #
TYPES: BEGIN OF ty_produit,
id TYPE char10,
nom TYPE char20,
prix TYPE i,
END OF ty_produit.
DATA: lt_produits TYPE SORTED TABLE OF ty_produit
WITH UNIQUE KEY id,
ls_produit TYPE ty_produit.
ls_produit-id = '0002'.
ls_produit-nom = 'Stylo'.
ls_produit-prix = 2.
INSERT ls_produit INTO TABLE lt_produits.
ls_produit-id = '0001'.
ls_produit-nom = 'Cahier'.
ls_produit-prix = 5.
INSERT ls_produit INTO TABLE lt_produits.
L’ordre final dans la table est :
0001 Cahier,0002 Stylo.
Exemple 2 – Ajout d’un troisième produit #
ls_produit-id = '0003'.
ls_produit-nom = 'Gomme'.
ls_produit-prix = 1.
INSERT ls_produit INTO TABLE lt_produits.
L’ordre reste automatiquement
0001,0002,0003.
Exercices #
1 – Créer une table de clients triée par id #
Déclarer une table
lt_clientstriée paridet y insérer trois lignes désordonnées.
SOLUTION
TYPES: BEGIN OF ty_client,
id TYPE char10,
nom TYPE char20,
prenom TYPE char20,
END OF ty_client.
DATA: lt_clients TYPE SORTED TABLE OF ty_client
WITH UNIQUE KEY id,
ls_client TYPE ty_client.
ls_client-id = '003'.
ls_client-nom = 'Durand'.
ls_client-prenom = 'Alice'.
INSERT ls_client INTO TABLE lt_clients.
ls_client-id = '001'.
ls_client-nom = 'Martin'.
ls_client-prenom = 'Paul'.
INSERT ls_client INTO TABLE lt_clients.
ls_client-id = '002'.
ls_client-nom = 'Bernard'.
ls_client-prenom = 'Luc'.
INSERT ls_client INTO TABLE lt_clients.
LOOP AT lt_clients INTO ls_client.
WRITE: / ls_client-id, ls_client-nom.
ENDLOOP.
2 – Tester une clé dupliquée #
Essayer d’insérer une ligne avec un
iddéjà existant et observer lesy-subrc.
SOLUTION
ls_client-id = '002'.
ls_client-nom = 'Dupont'.
ls_client-prenom = 'Jean'.
INSERT ls_client INTO TABLE lt_clients.
IF sy-subrc <> 0.
WRITE: / 'Erreur : clé déjà existante.'.
ENDIF.
Résumé #
TYPE SORTED TABLE OF→ table interne triée automatiquement selon une clé.- Clé obligatoire (
WITH UNIQUE KEYouWITH NON-UNIQUE KEY).- Accès par clé très rapide (binaire).
- Insertion plus lente à cause du maintien de l’ordre.
- Interdiction d’utiliser
APPEND.- Idéale pour les listes triées, les recherches rapides et la garantie d’unicité.
Type range of #
Objectifs #
- Comprendre le rôle d’une
RANGE TABLE - Identifier les champs prédéfinis :
SIGN,OPTION,LOW,HIGH - Comprendre la notion d’inclusion/exclusion et d’intervalles
Définition #
Une
RANGE TABLEest une table interne spéciale pour définir des intervalles de valeurs.
Elle est utilisée pour filtrer des données dans lesrequêtes SQLet lesécrans de sélection.
Imaginez un filtre de recherche avancé
- Vous indiquez ce que vous voulez inclure ou exclure
- Vous précisez des intervalles de valeurs
- La table RANGE stocke toutes ces informations de manière structurée pour la requête
Champs prédéfinis #
SIGN(C, 1) → Incluse (I) ou Exclue (E)OPTION(C, 2) → opérateur : EQ, NE, GT, LT, BT…LOW→ limite inférieure de l’intervalleHIGH→ limite supérieure de l’intervalle
Chaque ligne de la
RANGE TABLEcorrespond à une règle de filtrage.
Déclaration #
" Déclaration d'une RANGE TABLE pour des numéros de produits (MATNR)
DATA: lr_matnr TYPE RANGE OF matnr.
La
lr_matnrest directement utilisable dans desSELECTou pourSELECT-OPTIONS.
Alimentation #
DATA: ls_matnr TYPE LINE OF lr_matnr.
" Inclure les produits 1000 à 2000
ls_matnr-sign = 'I'.
ls_matnr-option = 'BT'.
ls_matnr-low = '1000'.
ls_matnr-high = '2000'.
APPEND ls_matnr TO lr_matnr.
" Exclure le produit 1500
ls_matnr-sign = 'E'.
ls_matnr-option = 'EQ'.
ls_matnr-low = '1500'.
ls_matnr-high = ''.
APPEND ls_matnr TO lr_matnr.
Le
SIGN= I → inclusion, E → exclusion
LeOPTION= BT → entre deux valeurs, EQ → valeur uniqueLes
RANGE TABLEsimplifient le filtrage complexe sans écrire de multiples conditionsIF.
Exercices #
1 – Créer une range table de produits #
Déclarer une
RANGE TABLElr_prodpour le typematnr.
Ajouter un intervalle inclus de 500 à 1000 et une exclusion pour 750.
SOLUTION
DATA: lr_prod TYPE RANGE OF matnr,
ls_prod TYPE LINE OF lr_prod.
" Inclure 500 à 1000
ls_prod-sign = 'I'.
ls_prod-option = 'BT'.
ls_prod-low = '500'.
ls_prod-high = '1000'.
APPEND ls_prod TO lr_prod.
" Exclure 750
ls_prod-sign = 'E'.
ls_prod-option = 'EQ'.
ls_prod-low = '750'.
ls_prod-high = ''.
APPEND ls_prod TO lr_prod.
2 – Ajouter un nouvel intervalle #
Ajouter un intervalle inclus de 1100 à 1200 et afficher la
RANGE TABLE.
SOLUTION
ls_prod-sign = 'I'.
ls_prod-option = 'BT'.
ls_prod-low = '1100'.
ls_prod-high = '1200'.
APPEND ls_prod TO lr_prod.
LOOP AT lr_prod INTO ls_prod.
WRITE: / 'SIGN:', ls_prod-sign,
'OPTION:', ls_prod-option,
'LOW:', ls_prod-low,
'HIGH:', ls_prod-high.
ENDLOOP.
3 – Ajouter une exclusion #
Exclure le produit 1120 et afficher toute la
RANGE TABLE.
SOLUTION
ls_prod-sign = 'E'.
ls_prod-option = 'EQ'.
ls_prod-low = '1120'.
ls_prod-high = ''.
APPEND ls_prod TO lr_prod.
LOOP AT lr_prod INTO ls_prod.
WRITE: / 'SIGN:', ls_prod-sign,
'OPTION:', ls_prod-option,
'LOW:', ls_prod-low,
'HIGH:', ls_prod-high.
ENDLOOP.
L’ordre des lignes n’a pas d’importance. Chaque ligne est évaluée lors du filtrage.
Résumé #
TYPE RANGE OF→ table interne pour stocker intervalles et exclusions.- Champs :
SIGN,OPTION,LOW,HIGH- Analogie : un filtre avancé qui mémorise les inclusions, exclusions et intervalles
- Astuce : chaque
APPENDajoute une nouvelle “règle” de filtrage
Type hashed table #
Objectifs #
- Comprendre le fonctionnement d’une
HASHED TABLE - Identifier les différences avec une
SORTED TABLE - Savoir déclarer correctement la clé unique obligatoire (
WITH UNIQUE KEY) - Savoir insérer et lire directement des lignes via la clé
Définition #
Une
HASHED TABLEest une table interne avec accès direct par clé unique.
Elle utilise un calcul de hachage pour localiser chaque ligne instantanément.
Contrairement à laSORTED TABLE, il n’y a pas d’ordre ni d’index implicite.
Imaginez un casier à code unique dans un vestiaire
- Chaque code (clé) ouvre directement le bon casier (ligne).
- Aucun besoin de parcourir les autres casiers pour trouver le bon.
- Deux clés identiques ne peuvent pas coexister – la clé doit être unique.
- La clé unique est obligatoire (
WITH UNIQUE KEY).- L’ordre des lignes n’est jamais garanti.
- Les insertions massives et les lectures par clé sont très performantes.
Déclaration #
1️⃣ Définir un type de structure pour les lignes :
TYPES: BEGIN OF ty_tab,
obj1 TYPE char10,
obj2 TYPE char20,
obj3 TYPE i,
END OF ty_tab.
2️⃣ Déclarer la table interne HASHED :
DATA: lt_tab_types TYPE HASHED TABLE OF ty_tab
WITH UNIQUE KEY obj1.
WITH UNIQUE KEY obj1→ clé primaire obligatoire.- Pas d’ordre, pas d’index explicite. La clé identifie chaque ligne.
Insertion et lecture par clé #
DATA: ls_tab TYPE ty_tab.
" Insertion
ls_tab-obj1 = '0001'.
ls_tab-obj2 = 'Dupont'.
ls_tab-obj3 = 45.
INSERT ls_tab INTO TABLE lt_tab_types.
IF sy-subrc = 0.
WRITE: / ls_tab-obj2, ls_tab-obj3.
ENDIF.
Ici, la recherche est instantanée grâce au mécanisme de hachage.
Aucune boucle ni tri n’est nécessaire pour accéder à une ligne spécifique.
Différences avec sorted table #
| Critère | Hashed table | Sorted table |
|---|---|---|
| Organisation interne | Table de hachage (calcul d’adresse) | Table triée par clé |
| Index | Aucun index explicite | Index créé automatiquement |
| Accès par clé | Direct (temps constant) | Binaire (temps logarithmique) |
| Clé obligatoire | Oui, WITH UNIQUE KEY |
Oui, WITH UNIQUE KEY |
| Ordre des enregistrements | Non garanti | Toujours trié selon la clé |
| Insertion massive | Très performante | Plus coûteuse (réordonnancement) |
- L’accès séquentiel (
LOOP AT) reste possible, mais l’ordre n’est jamais garanti.- Pour les recherches fréquentes par clé,
HASHED TABLEest optimal.- Ne jamais insérer deux lignes avec la même clé unique.
Exercices – Déclaration et insertion #
1 – Créer une hashed table de clients #
Déclarer une table interne
lt_clientsavec une structurety_clientcontenant
- id (CHAR10) → clé unique
- nom (CHAR20)
- ville (CHAR20)
Ajouter au moins deux clients.
SOLUTION
TYPES: BEGIN OF ty_client,
id TYPE char10,
nom TYPE char20,
ville TYPE char20,
END OF ty_client.
DATA: lt_clients TYPE HASHED TABLE OF ty_client
WITH UNIQUE KEY id,
ls_client TYPE ty_client.
ls_client-id = 'C002'.
ls_client-nom = 'Martin'.
ls_client-ville = 'Paris'.
INSERT ls_client INTO TABLE lt_clients.
ls_client-id = 'C001'.
ls_client-nom = 'Dupont'.
ls_client-ville = 'Lyon'.
INSERT ls_client INTO TABLE lt_clients.
Résumé #
HASHED TABLE→ table interne avec accès direct par clé unique.- Obligatoire :
WITH UNIQUE KEY.- Avantage : lecture très rapide par clé, insertion performante.
- Inconvénient : pas d’ordre naturel, pas d’accès séquentiel ordonné garanti.
[!IMPORTANT] définir clairement la clé, éviter les doublons, privilégier les recherches par clé.