SAP ABAP intern tabel: Opret, læs, udfyld, kopier og slet
Hvad er et internt bord?
INDVENDIG TABEL bruges til at hente data fra en fast struktur til dynamisk brug i ABAP. Hver linje i den interne tabel har den samme feltstruktur. Hovedanvendelsen af interne tabeller er til lagring og formatering af data fra en databasetabel i et program.
Hvad er et arbejdsområde?
Arbejdsområder er enkelte rækker af data. De skal have samme format som alle de interne tabeller. Det bruges til at behandle dataene i en intern tabel en linje ad gangen.
Forskellen mellem internt bord og et arbejdsområde?
Et billede siger tusind ord
Typer af interne borde
Der er to typer interne borde.
- Indvendige borde med HEADER-linje
- Interne borde uden HEADER-linje.
Interne tabeller med overskriftslinje
- Her opretter systemet automatisk arbejdsområdet.
- Arbejdsområdet har samme datatype som intern tabel.
- Dette arbejdsområde kaldes HEADER-linjen.
- Det er her, at alle ændringer eller handlinger på indholdet af tabellen udføres. Som et resultat af dette kan poster indsættes direkte i tabellen eller tilgås direkte fra den interne tabel.
Interne tabeller uden overskriftslinje :
- Her er der ikke noget arbejdsområde tilknyttet bordet.
- Arbejdsområdet skal udtrykkeligt specificeres, når vi skal have adgang til sådanne tabeller.
- Disse tabeller kan derfor ikke tilgås direkte.
Oprettelse af interne tabeller
Der er mange måder at oprette en intern tabel på. Lad os se på dem en efter en-
1.Ved at bruge typeerklæringen
Lad os nu oprette en intern tabel itab ved hjælp af TYPE erklæring.
Syntaksen er -
Types : begin of line, column1 type I, column2 type I, end of line.
Eksempel:
TYPES : begin of line, empno type I, empname(20) type c , end of line.
TYPES-sætningen opretter en strukturlinje som defineret.
For faktisk at oprette en intern tabel itab, brug følgende kommando-
Data itab type line occurs 10.
En intern tabel-itab oprettes med strukturen af linje. Udover at erklære strukturen af en intern tabel, definerer OCCURS-sætningen også, hvor mange tabelposter der bevares i hovedlageret (i dette tilfælde 10). Ekstra poster skrives ud til personsøgningsområdet og kan påvirke ydeevnen
2.Ved at henvise til en anden tabel
Du kan oprette en intern tabel ved at henvise til en eksisterende tabel. Det eksisterende bord kunne være en standard SAP bord, et Z-bord eller et andet internt bord.
Syntaks-
Data <f> <type> [with header line].
Eksempel-
DATA itab TYPE line OCCURS 10 with header line.
Her oprettes en intern tabel itab af typen linje med en overskriftslinje. Bemærk venligst "med overskriftslinje" er valgfrit.
3.Ved at henvise til eksisterende struktur
Syntaks-
Data <f> LIKE <struct> occurs n [with header line].
Eksempel-
DATA itab LIKE sline OCCURS 10.
Her oprettes en tabel itab med samme struktur som sline
4.Ved at oprette en ny struktur
Lad os nu skabe en intern tabel med vores egen struktur. Her er tabellen oprettet med en overskriftslinje, som standard.
Syntaks –
Data : Begin of <f> occurs <n>, <component declaration>, ................................., End of <f>.
Eksempel -
Data : Begin of itab occurs 10, column1 type I, column2(4) type C, column3 like mara-ernam, End of itab.
Intern tabel itab oprettes
Indfyldning af interne tabeller
Nu hvor vi har oprettet nogle interne tabeller, så lad os se, hvordan vi udfylder dem med nogle poster. Der findes forskellige metoder til at udfylde tabeller
1.Tilføj data linje for linje
Den første tilgængelige metode er brugen af APPEND-sætningen.
Ved at bruge APPEND-sætningen kan vi enten tilføje en linje fra et andet arbejdsområde til den interne tabel, eller vi kan tilføje en indledende linje til den interne tabel.
Syntaks –
APPEND [<wa> TO / INITIAL LINE TO] <itable>.
Her arbejdsområde eller den indledende linje er tilføjet til den interne tabel .
Systemvariablen SY-TABIX indeholder indekset for den tilføjede linje.
Eksempel:
Data: Begin of itab occurs 10, col1 type C, col2 type I, end of itab. Append initial line to itab.
Resultater: ' ' '0'
Indledende linjer tilføjer en linje initialiseret med den korrekte værdi for dens type til tabellen. Her er col1 et tegn og col2 er et heltal. Derefter APPEND initial line, tilføjer en linje initialiseret med hensyn til datatypen for kolonnerne, dvs. plads til col1 og 0 for col2.
2. Brug af COLLECT-sætning
COLLECT er en anden form for erklæring, der bruges til at udfylde de interne tabeller. Generelt bruges COLLECT, mens linjer indsættes i en intern tabel med unik standardnøgle.
Syntaks-
COLLECT [<wa> INTO] <itable>.
I tilfælde af tabeller med overskriftslinje, er INTO muligheden udeladt. Antag, at der allerede er en post, der har en nøgle, der er den samme som den, du forsøger at tilføje, så tilføjes en ny linje ikke til tabellen, men de numeriske felter for begge indtastninger er tilføjet, og kun én post, der svarer til nøglen, er til stede . Værdien af SY-TABIX ændres til rækken af den oprindelige post. Ellers virker COLLECT svarende til APPEND, og SY-TABIX indeholder indekset for den behandlede linje.
3.Bruger INSERT-sætning
INSERT-sætning tilføjer en linje/arbejdsområde til den interne tabel. Du kan angive den position, hvor den nye linje skal tilføjes, ved at bruge INDEX-sætningen med INSERT-sætningen.
Syntaks
INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].
Her arbejdsområdet eller INITIAL LINE er indsat i intern tabel ved indeks .
Kopiering af interne tabeller
Indholdet af en intern tabel kan kopieres til en anden ved at bruge APPEND LINES eller INSERT LINES-sætningen. En mere enkel måde er at bruge nogen af de følgende syntakser.
MOVE <itab1> To <itab2>. OR <itab1> = <itab2>.
Disse kopierer indholdet af ITAB1 til ITAB2. I tilfælde af interne tabeller med overskriftslinje skal vi bruge [] for at skelne fra arbejdsområdet. Så for at kopiere indholdet af interne tabeller med overskriftslinje bliver syntaksen,
itab1[] = itab2[].
Læs interne tabeller
Vi er nu bekendt med oprettelsen af interne tabeller og udfylde dem med data. Vi vil nu se, hvordan vi rent faktisk bruger dataene eller henter dataene fra de interne tabeller.
1. Brug af Loop -Endloop
En af måderne at få adgang til eller læse den interne tabel på er ved at bruge LOOP-ENDLOOP.
Syntaks
LOOP AT <itable> [INTO <wa>] ................................... ENDLOOP.
Her når du siger LOOP AT ITABLE, så læses den interne tabel ITABLE linje for linje. Du kan få adgang til værdierne af kolonnerne for den linje under enhver del af LOOP-ENDLOOP strukturen. Værdien af SY-SUBRC er indstillet til 0, selvom kun én post læses.
2. Brug af READ
Den anden metode til at læse den interne tabel er ved at bruge READ-sætningen.
Syntaks-
READ TABLE <itable> [INTO <wa>] INDEX <idx>.
Denne sætning læser den aktuelle linje eller linje som angivet af indeks . Værdien af SY-TABIX er indekset for den aflæste linje. Hvis der findes en post med det angivne indeks, sættes SY-SUBRC til 0. Hvis det angivne indeks er mindre end 0, opstår der en køretidsfejl. Hvis det angivne indeks overstiger tabelstørrelsen, er SY-SUBRC sat til 4.
Sletning af interne tabeller
Der er mange måder at slette linjer fra en intern tabel på.
1.Sletning af linjer i en loop.
Dette er den enkleste måde at slette linjer på.
Syntaks
DELETE <ITABLE>.
Denne erklæring virker kun inden for en løkke. Det sletter den aktuelle linje. Du kan slette linjerne i en loop betinget ved at tilføje WHERE-klausul.
2.Sletning af linjer ved hjælp af indekset.
Dette bruges til at slette en linje fra intern tabel ved ethvert kendt indeks.
Syntaks
DELETE <ITABLE> INDEX <IDX>.
Linjen med indekset er slettet. Indekset for den følgende linje formindskes med 1.