SAP ABAP intern tabell: Skapa, läs, fyll i, kopiera och ta bort
Vad är ett internt bord?
INRE BORD används för att hämta data från en fast struktur för dynamisk användning i ABAP. Varje rad i den interna tabellen har samma fältstruktur. Den huvudsakliga användningen för interna tabeller är för att lagra och formatera data från en databastabell i ett program.
Vad är ett arbetsområde?
Arbetsområden är enstaka rader med data. De bör ha samma format som någon av de interna tabellerna. Den används för att bearbeta data i en intern tabell en rad i taget.
Skillnad mellan internt bord och ett arbetsområde?
En bild säger mer än tusen ord
Typer av interna tabeller
Det finns två typer av interna tabeller.
- Interna tabeller med HEADER-linje
- Interna tabeller utan HEADER-rad.
Interna tabeller med rubriklinje
- Här skapar systemet automatiskt arbetsområdet.
- Arbetsområdet har samma datatyp som intern tabell.
- Detta arbetsområde kallas HEADER-raden.
- Det är här som alla ändringar eller någon av åtgärderna på innehållet i tabellen görs. Som ett resultat av detta kan poster infogas direkt i tabellen eller nås direkt från den interna tabellen.
Interna tabeller utan rubriklinje :
- Här finns inget arbetsområde kopplat till bordet.
- Arbetsområdet ska uttryckligen anges när vi behöver komma åt sådana tabeller.
- Dessa tabeller kan därför inte nås direkt.
Skapa interna tabeller
Det finns många sätt att skapa en intern tabell. Låt oss titta på dem en efter en-
1.Genom att använda typintyget
Låt oss nu skapa en intern tabell med hjälp av TYPE uttalande.
Syntaxen är -
Types : begin of line, column1 type I, column2 type I, end of line.
Exempelvis:
TYPES : begin of line, empno type I, empname(20) type c , end of line.
TYPES-satsen skapar en strukturlinje enligt definitionen.
För att faktiskt skapa en intern tabell, använd följande kommando-
Data itab type line occurs 10.
En intern tabell-itab skapas med strukturen för linje. Förutom att deklarera strukturen för en intern tabell, definierar OCCURS-satsen också hur många tabellposter som underhålls i huvudminnet (i detta fall 10). Extra poster skrivs ut till personsökningsområdet och kan påverka prestandan
2.Genom att hänvisa till en annan tabell
Du kan skapa en intern tabell genom att referera till en befintlig tabell. Det befintliga bordet kan vara en standard SAP bord, ett Z-bord eller annat internt bord.
Syntax-
Data <f> <type> [with header line].
Exempel-
DATA itab TYPE line OCCURS 10 with header line.
Här skapas en intern tabell-itab av typen rad med en rubrikrad. Observera att "med rubrikrad" är valfritt.
3.Genom att hänvisa till befintlig struktur
Syntax-
Data <f> LIKE <struct> occurs n [with header line].
Exempel-
DATA itab LIKE sline OCCURS 10.
Här skapas en tabell itab med samma struktur som sline
4.Genom att skapa en ny struktur
Låt oss nu skapa en intern tabell med en egen struktur. Här skapas tabellen med en rubrikrad, som standard.
Syntax –
Data : Begin of <f> occurs <n>, <component declaration>, ................................., End of <f>.
Exempel -
Data : Begin of itab occurs 10, column1 type I, column2(4) type C, column3 like mara-ernam, End of itab.
Intern tabell itab skapas
Fylla i interna tabeller
Nu när vi har skapat några interna tabeller, låt oss se hur vi fyller dem med några poster. Det finns olika metoder tillgängliga för att fylla i tabeller
1. Lägg till data rad för rad
Den första tillgängliga metoden är användningen av APPEND-satsen.
Med hjälp av APPEND-satsen kan vi antingen lägga till en rad från ett annat arbetsområde till den interna tabellen eller så kan vi lägga till en initial rad till den interna tabellen.
Syntax –
APPEND [<wa> TO / INITIAL LINE TO] <itable>.
Här arbetsområde eller den initiala raden läggs till den interna tabellen .
Systemvariabeln SY-TABIX innehåller indexet för den bifogade raden.
Exempelvis:
Data: Begin of itab occurs 10, col1 type C, col2 type I, end of itab. Append initial line to itab.
Resultat: ' ' '0'
Inledande rader lägger till en rad som initierats med rätt värde för sin typ i tabellen. Här är col1 ett tecken och col2 är ett heltal. Sedan APPEND initial line, lägger till en rad initierad med avseende på datatypen för kolumnerna, dvs utrymme för col1 och 0 för col2.
2.Använda COLLECT-satsen
COLLECT är en annan form av uttalande som används för att fylla i de interna tabellerna. I allmänhet används COLLECT när rader infogas i en intern tabell med unik standardnyckel.
Syntax-
COLLECT [<wa> INTO] <itable>.
Om tabeller med rubrikrad, INTO-alternativet utelämnas. Anta att det redan finns en post med samma nyckel som den du försöker lägga till, då läggs inte en ny rad till i tabellen, utan de numeriska fälten för båda posterna läggs till och endast en post som motsvarar nyckeln finns närvarande . Värdet på SY-TABIX ändras till raden för den ursprungliga posten. Annars fungerar COLLECT liknande APPEND och SY-TABIX innehåller indexet för den bearbetade raden.
3.Använder INSERT-satsen
INSERT-satsen lägger till en rad/arbetsområde till den interna tabellen. Du kan ange var den nya raden ska läggas till genom att använda INDEX-satsen med INSERT-satsen.
syntax
INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].
Här, arbetsområdet eller INITIAL LINE infogas i den interna tabellen vid index .
Kopiera interna tabeller
Innehållet i en intern tabell kan kopieras till en annan genom att använda satsen APPEND LINES eller INSERT LINES. Ett enklare sätt är att använda någon av följande syntaxer.
MOVE <itab1> To <itab2>. OR <itab1> = <itab2>.
Dessa kopierar innehållet i ITAB1 till ITAB2. Om det finns interna tabeller med rubrikrad måste vi använda [] för att skilja från arbetsområdet. Så för att kopiera innehållet i interna tabeller med rubrikrad blir syntaxen,
itab1[] = itab2[].
Läs interna tabeller
Vi är nu bekanta med att skapa interna tabeller och fylla dem med data. Vi ska nu se hur vi faktiskt använder data eller hämtar data från de interna tabellerna.
1. Använda Loop -Endloop
Ett av sätten att komma åt eller läsa den interna tabellen är att använda LOOP-ENDLOOP.
syntax
LOOP AT <itable> [INTO <wa>] ................................... ENDLOOP.
Här när du säger LOOP AT ITABLE, så läses den interna tabellen ITABLE rad för rad. Du kan komma åt värdena för kolumnerna för den raden under vilken del som helst av LOOP-ENDLOOP-strukturen. Värdet på SY-SUBRC är satt till 0även om endast en post läses.
2. Använd READ
Den andra metoden för att läsa den interna tabellen är att använda READ-satsen.
Syntax-
READ TABLE <itable> [INTO <wa>] INDEX <idx>.
Denna sats läser den aktuella raden eller raden enligt index . Värdet på SY-TABIX är indexet för den lästa raden. Om en post med det angivna indexet hittas, sätts SY-SUBRC till 0. Om det angivna indexet är mindre än 0, uppstår ett körtidsfel. Om det angivna indexet överskrider tabellstorleken är SY-SUBRC satt till 4.
Ta bort interna tabeller
Det finns många sätt att ta bort rader från en intern tabell.
1.Ta bort rader i en slinga.
Detta är det enklaste sättet att ta bort rader.
syntax
DELETE <ITABLE>.
Detta uttalande fungerar bara inom en loop. Den tar bort den aktuella raden. Du kan ta bort raderna i en loop villkorligt genom att lägga till VAR klausul.
2.Ta bort rader med hjälp av indexet.
Detta används för att ta bort en rad från den interna tabellen vid alla kända index.
syntax
DELETE <ITABLE> INDEX <IDX>.
Linjen med indexet är raderad. Indexet för följande rad minskas med 1.