SAP ABAP interne tabel: creëren, lezen, invullen, kopiëren en verwijderen

⚡ Slimme samenvatting

SAP ABAP Internal Table-objecten bevatten gegevens uit een vaste structuur voor dynamisch gebruik binnen een programma. Deze pagina legt werkgebieden, kopregels, de vier aanmaakmethoden en de instructies voor het vullen, kopiëren, lezen en verwijderen van tabelrijen uit.

  • 📋 Kerndefinitie: Een interne tabel slaat rijen met een identieke structuur op in het hoofdgeheugen, meestal om gegevens te formatteren die uit een databasetabel worden gelezen.
  • 🧾 Functie binnen het werkgebied: Een werkgebied is een enkele rij met dezelfde opmaak als de tabel, en het verwerkt de tabel regel voor regel.
  • ???? ️ Kopregel: Een tabel met een kopregel krijgt een impliciet werkgebied toegewezen, waardoor rijen direct kunnen worden ingevoegd of gelezen zonder dat er een naam hoeft te worden opgegeven.
  • Vier creatiemethoden: TYPES-instructie, verwijzing naar een bestaande tabel, verwijzing naar een bestaande structuur of een nieuwe structuur die is gedeclareerd met OCCURS.
  • Bevolken: APPEND voegt één rij toe, COLLECT aggregeert numerieke velden voor een dubbele sleutel en INSERT plaatst een rij op een gekozen index.
  • 🔍 Lezen en kopiëren: LOOP AT leest elke rij, READ TABLE leest één rij op basis van de index, en MOVE of het gelijkheidsteken kopieert een hele tabel.
  • 🗑️ Verwijderen: DELETE binnen een LOOP verwijdert de huidige rij, en DELETE … INDEX verwijdert de rij op een bekende positie.

SAP ABAP interne tabellen

Wat is een interne tabel?

INTERNE TABEL worden gebruikt om gegevens uit een vaste structuur te verkrijgen voor dynamisch gebruik in ABAP. Elke regel in de interne tabel heeft dezelfde veldstructuur. Het belangrijkste gebruik van interne tabellen is het opslaan en opmaken van gegevens uit een databasetabel binnen een programma.

Een interne tafel werkt altijd samen met een werkgebied, dus dat concept komt hierna aan bod.

Wat is een werkgebied?

Werkgebieden bestaan ​​uit afzonderlijke rijen met gegevens. Ze moeten dezelfde opmaak hebben als de interne tabellen. Ze worden gebruikt om de gegevens in een interne tabel regel voor regel te verwerken.

Wat is het verschil tussen een interne tabel en een werkgebied?

Een beeld zegt meer dan duizend woorden

Verschil tussen interne tafel en een werkgebied

Het diagram toont een tabel met veel rijen, terwijl het werkgebied alleen de rij bevat die op dat moment wordt verwerkt. Of dat werkgebied door het systeem of door de ontwikkelaar wordt aangemaakt, hangt af van het tabeltype dat hieronder wordt beschreven.

Soorten interne tabellen

Er zijn twee soorten interne tabellen.

  1. Interne tabellen met HEADER-lijn
  2. Interne tabellen zonder HEADER-regel.

Interne tabellen met kopregel

  • Hier creëert het systeem automatisch het werkgebied.
  • Het werkgebied heeft hetzelfde gegevenstype als de interne tabel.
  • Dit werkgebied wordt de HEADER-lijn genoemd.
  • Hier worden alle wijzigingen of enige actie op de inhoud van de tabel uitgevoerd. Als gevolg hiervan kunnen records rechtstreeks in de tabel worden ingevoegd of rechtstreeks vanuit de interne tabel worden geopend.

Interne tabellen zonder kopregel :

  • Hier is geen werkgebied aan de tafel gekoppeld.
  • Het werkgebied moet expliciet worden gespecificeerd wanneer we toegang tot dergelijke tabellen nodig hebben.
  • Daarom zijn deze tabellen niet rechtstreeks toegankelijk.

💡Tip: Een tabel met een kopregel heeft dezelfde naam voor zowel de tabel zelf als het werkgebied, wat de code onduidelijk maakt. Nieuwe programma's zouden een tabel zonder kopregel moeten declareren en een expliciet werkgebied moeten opgeven.

Standaard, gesorteerde en gehashte interne tabellen

Naast het onderscheid in de kopregel heeft elke interne tabel ook een tabeltype dat bepaalt hoe een rij wordt gevonden. Het type wordt gekozen met de toevoeging TYPE STANDARD TABLE, TYPE SORTED TABLE of TYPE HASHED TABLE en heeft een directe invloed op de runtime.

Tafelsoort Toegangsmethode sleutel Best gebruikt voor
Standaard Index en sleutel, met een lineaire zoekopdracht op de sleutel. Niet uniek Sequentiële verwerking en kleine tabellen die met een index worden gelezen.
gesorteerd Index en sleutel, met een binaire zoekopdracht op de sleutel. Uniek of niet-uniek, automatisch gesorteerd. Grotere tabellen lezen herhaaldelijk de belangrijkste sleutelvelden.
gehashte Alleen de sleutel, met een hash-algoritme. Uniek Zeer grote tabellen die altijd volledig worden gelezen, zoals een buffer met databasegegevens.

Een standaardtabel is de standaard en is geschikt voor sequentiële verwerking. Een hashtabel zorgt ervoor dat de toegangstijd constant blijft, ongeacht het aantal opgeslagen rijen. Daarom gelden de prestatieregels van SQL openen Ik raad het aan voor het bufferen van gegevens.

Interne tabellen maken

Er zijn veel manieren om een ​​interne tabel te maken. Laten we ze een voor een bekijken-

1.Door gebruik te maken van de Type-instructie

Laten we nu een interne tabel itab aanmaken met behulp van de TYPE-instructie.

De syntaxis is -

Types : begin of line,

column1 type I,

column2 type I,

end of line.

Voorbeeld:

TYPES : begin of line,

empno		type I,

empname(20)   	type c	,

end of line.

De instructie TYPES creëert een structuurlijn zoals gedefinieerd.

Om daadwerkelijk een interne tabel itab te maken, gebruikt u de volgende opdracht:

Data itab type line occurs 10.

Er wordt een interne tabel itab gemaakt met de structuur van line. Naast het declareren van de structuur van een interne tabel, definieert de OCCURS-clausule ook hoeveel tabelitems er in de hoofdopslag worden bijgehouden (in dit geval 10). Extra records worden weggeschreven naar het paginggebied en kunnen de prestaties beïnvloeden

2.Door naar een andere tabel te verwijzen

Je kunt een interne tabel maken door te verwijzen naar een bestaande tabel. De bestaande tabel kan bijvoorbeeld een standaardtabel zijn. SAP tabel, een Z-tabel of een andere interne tabel.

Syntaxis-

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

Voorbeeld-

DATA itab TYPE line OCCURS 10 with header line.

Hier wordt een interne tabel itab gemaakt van het type regel met een kopregel. Let op: “met kopregel” is optioneel.

3.Door te verwijzen naar de bestaande structuur

Syntaxis-

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

Voorbeeld-

DATA itab LIKE sline OCCURS 10.

Hier wordt een tabel itab aangemaakt met dezelfde structuur als sline.

4.Door een nieuwe structuur te creëren

Laten we nu een interne tabel maken met een eigen structuur. Hier wordt de tabel gemaakt met een kopregel, bij verstek.

Syntaxis -

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

<component declaration>,

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

End of <f>.

Voorbeeld -

Data : Begin of itab occurs 10,

column1       type I,

column2(4)  type C,

column3      like  mara-ernam,

End of itab.

Interne tabel itab is gemaakt

Een lege tabel is van weinig nut, dus in het volgende gedeelte wordt deze gevuld met rijen.

Interne tabellen invullen

Nu we met succes enkele interne tabellen hebben gemaakt, gaan we kijken hoe we deze kunnen vullen met enkele records. Er zijn verschillende methoden beschikbaar om tabellen te vullen

1. Gegevens regel voor regel toevoegen

De eerste beschikbare methode is het gebruik van de APPEND-instructie.

Met behulp van de APPEND-instructie kunnen we één regel uit een ander werkgebied aan de interne tabel toevoegen, of we kunnen één initiële regel aan de interne tabel toevoegen.

Syntaxis -

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

Hier werkgebied of de initiële regel wordt toegevoegd aan de interne tabel .

De systeemvariabele SY-TABIX bevat de index van de toegevoegde regel.

Voorbeeld:

Data: Begin of itab occurs 10,

col1 type C,

col2 type I,

end of itab.

Append initial line to itab.

Resultaten: ' ' '0'

Initial lines voegt een regel toe aan de tabel die is geïnitialiseerd met de juiste waarde voor het betreffende gegevenstype. Hier is col1 een tekenreeks en col2 een geheel getal. Vervolgens voegt APPEND initial line een regel toe die is geïnitialiseerd met betrekking tot het gegevenstype van de kolommen, d.w.z. een spatie voor col1 en 0 voor col2.

2. Met behulp van de COLLECT-instructie

COLLECT is een andere vorm van instructie die wordt gebruikt voor het vullen van de interne tabellen. Over het algemeen wordt COLLECT gebruikt bij het invoegen van regels in een interne tabel met een unieke standaardsleutel.

Syntaxis-

COLLECT [<wa> INTO] <itable>.

Bij tabellen met een kopregel wordt de optie INTO weggelaten. Stel dat er al een item is met dezelfde sleutel als degene die u probeert toe te voegen, dan wordt er geen nieuwe regel aan de tabel toegevoegd, maar worden de numerieke velden van beide items toegevoegd en is er slechts één item dat overeenkomt met de sleutel aanwezig. . De waarde van SY-TABIX wordt gewijzigd in de rij van de oorspronkelijke invoer. Anders werkt COLLECT vergelijkbaar met APPEND en bevat SY-TABIX de index van de verwerkte regel.

3. Gebruik maken van de INSERT-instructie

De INSERT-instructie voegt een regel-/werkgebied toe aan de interne tabel. U kunt de positie opgeven waarop de nieuwe regel moet worden toegevoegd door de INDEX-clausule te gebruiken met de INSERT-instructie.

Syntaxis

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

Hier bevindt zich het werkgebied. of INITIËLE LINE wordt ingevoegd in de interne tabel bij index .

Interne tabellen kopiëren

De inhoud van een interne tabel kan naar een andere worden gekopieerd met behulp van de APPEND-functie. LINES of INVOEGEN LINES-instructie. Een eenvoudigere manier is om een ​​van de volgende syntaxen te gebruiken.

MOVE  <itab1> To <itab2>.

OR

<itab1> = <itab2>.

Deze kopiëren de inhoud van ITAB1 naar ITAB2. In het geval van interne tabellen met kopregel moeten we [] gebruiken om onderscheid te maken van het werkgebied. Dus om de inhoud van interne tabellen met kopregel te kopiëren, wordt de syntaxis:

itab1[] = itab2[].

Lees interne tabellen

We zijn nu bekend met het aanmaken van interne tabellen en het vullen ervan met gegevens. We gaan nu bekijken hoe we de gegevens daadwerkelijk gebruiken of ophalen uit de interne tabellen.

1. Gebruik Loop-Endloop

Eén van de manieren om toegang te krijgen tot de interne tabel of deze te lezen is door gebruik te maken van LOOP-ENDLOOP.

Syntaxis

LOOP AT <itable> [INTO <wa>]

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

ENDLOOP.

Als u hier LOOP AT ITABLE zegt, wordt de interne tabel ITABLE regel voor regel gelezen. U kunt tijdens elk deel van de LOOP-ENDLOOP-structuur toegang krijgen tot de waarden van de kolommen voor die regel. De waarde van de SY-SUBRC is ingesteld op 0, zelfs als er maar één record wordt gelezen.

2. LEZEN gebruiken

De andere methode om de interne tabel te lezen is door de READ-instructie te gebruiken.

Syntaxis-

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

Deze instructie leest de huidige regel of regel zoals gespecificeerd door index. De waarde van SY-TABIX is de index van de gelezen regel. Als een item met de opgegeven index wordt gevonden, wordt SY-SUBRC ingesteld op 0. Als de opgegeven index kleiner is dan 0, treedt er een runtimefout op. Als de opgegeven index de tabelgrootte overschrijdt, wordt SY-SUBRC ingesteld op 4.

⚠️ Waarschuwing: De opdracht `READ TABLE … INDEX 0` geeft een runtimefout. Controleer daarom of de index tijdens de uitvoering wordt berekend voordat de opdracht wordt uitgevoerd.

Interne tabellen verwijderen

Er zijn veel manieren om regels uit een interne tabel te verwijderen.

1.Lijnen in een lus verwijderen.

Dit is de eenvoudigste manier om regels te verwijderen.

Syntaxis

DELETE <ITABLE>.

Deze verklaring werkt alleen binnen een lus. Het verwijdert de huidige regel. U kunt de regels in een lus voorwaardelijk verwijderen door de WHERE-clausule.

2.Regels verwijderen met behulp van de index.

Dit wordt gebruikt om een ​​regel uit de interne tabel bij een bekende index te verwijderen.

Syntaxis

DELETE <ITABLE> INDEX <IDX>.

De lijn met de index wordt verwijderd. De index van de volgende regel wordt met 1 verlaagd.

3. Dubbele regels verwijderen.

Dubbele rijen worden verwijderd nadat de tabel is gesorteerd op de sleutelvelden.

SORT itab BY col1.

DELETE ADJACENT DUPLICATES FROM itab COMPARING col1.

Alleen aangrenzende rijen worden vergeleken, daarom moet de SORT-instructie eerst worden uitgevoerd. Om de tabel volledig leeg te maken, gebruikt u CLEAR itab[] of REFRESH itab.

Veelgestelde vragen

CLEAR itab maakt alleen de headerregel leeg, en CLEAR itab[] maakt de body leeg. REFRESH maakt altijd de body leeg, maar behoudt het gereserveerde geheugen. FREE maakt de body leeg en geeft ook het geheugen vrij.

SY-TABIX bevat het rijnummer van de interne tabel die momenteel wordt verwerkt. SY-INDEX bevat het stapnummer van een DO- of WHILE-lus. Een hashtabel laat SY-TABIX op nul staan, omdat deze geen index heeft.

Door een veldsymbool toe te wijzen aan de itab-instructie wordt voorkomen dat elke rij naar een werkgebied wordt gekopieerd. Dit zorgt voor een snellere uitvoering bij grote tabellen en maakt het mogelijk om de rij ter plekke te wijzigen zonder een MODIFY-instructie.

Ja. AI-assistenten in ABAP-ontwikkeltools herschrijven OCCURS- en headerregeldeclaraties naar TYPE STANDARD TABLE OF met een expliciet werkgebied, en ze markeren de instructies die vastlopen zodra de headerregel verdwijnt.

AI-prestatieadviseurs inspecteren hoe een tabel wordt gevuld en gelezen, en bevelen vervolgens een gesorteerde of gehashte tabel aan wanneer een lineaire zoekopdracht de uitvoeringstijd domineert. De aanbeveling wordt bevestigd met een trace in transactie SAT.

Vat dit bericht samen met: