SAP ABAP belső táblázat: létrehozás, olvasás, feltöltés, másolás és törlés
⚡ Okos összefoglaló
SAP Az ABAP belső tábla objektumai egy rögzített struktúrából származó adatokat tárolnak a programon belüli dinamikus felhasználáshoz. Ez az oldal ismerteti a munkaterületeket, a fejlécsorokat, a négy létrehozási metódust, valamint a tábla sorait feltöltő, másoló, olvasó és törlési utasításokat.

Mi az a belső asztal?
BELSŐ TÁBLÁZAT arra szolgálnak, hogy adatokat nyerjenek egy rögzített struktúrából dinamikus használatra az ABAP-ban. A belső táblázat minden sora azonos mezőszerkezettel rendelkezik. A belső táblák fő felhasználási területe egy programon belüli adatbázistáblázatból származó adatok tárolása és formázása.
Egy belső asztal mindig egy munkaterülettel együtt működik, így ez a koncepció következik.
Mi az a munkaterület?
A munkaterületek egyetlen adatsorok. Formátumuknak meg kell egyeznie a belső táblázatok formátumával. A belső táblázat adatainak soronkénti feldolgozására szolgálnak.
Különbség a belső asztal és a munkaterület között?
Egy kép többet mond ezer szónál
Az ábra azt mutatja, hogy a tábla sok sort tartalmaz, míg a munkaterület csak az aktuálisan feldolgozás alatt álló sort tartalmazza. Attól függően, hogy a munkaterületet a rendszer vagy a fejlesztő hozza létre, az alább leírt táblatípustól függ.
A belső táblázatok típusai
Kétféle belső tábla létezik.
- Belső táblázatok HEADER sorral
- Belső táblázatok HEADER sor nélkül.
Belső táblázatok fejlécsorral
- Itt a rendszer automatikusan létrehozza a munkaterületet.
- A munkaterület adattípusa megegyezik a belső táblával.
- Ezt a munkaterületet HEADER vonalnak nevezik.
- Itt hajtják végre a táblázat tartalmával kapcsolatos összes módosítást vagy bármely műveletet. Ennek eredményeként a rekordok közvetlenül beilleszthetők a táblába, vagy közvetlenül elérhetők a belső táblából.
Belső táblázatok fejléc nélkül :
- Itt nincs a táblázathoz társított munkaterület.
- A munkaterületet kifejezetten meg kell adni, amikor ilyen táblákhoz kell hozzáférnünk.
- Ezért ezek a táblázatok nem érhetők el közvetlenül.
💡 Tipp: Egy fejléccel rendelkező táblázat ugyanazt a nevet viseli a táblázatnak és a munkaterületének, ami a kódot kétértelművé teszi. Az új programoknak fejléc nélküli táblázatot kell deklarálniuk, és explicit munkaterületet kell átadniuk.
Standard, rendezett és hashelt belső táblázatok
A fejlécsor megkülönböztetésen kívül minden belső táblának van egy táblatípusa is, amely meghatározza, hogyan található meg egy sor. A típust a TYPE STANDARD TABLE, TYPE SORTED TABLE vagy TYPE HASHED TABLE kiegészítéssel lehet kiválasztani, és közvetlen hatással van a futási időre.
| Táblázat típusa | Hozzáférési módszer | Kulcs | A legjobban használható |
|---|---|---|---|
| Standard | Index és kulcs, lineáris kereséssel a kulcson | Nem egyedi | Szekvenciális feldolgozás és kis táblák indexszel történő olvasása |
| Rendezés | Index és kulcs, bináris kereséssel a kulcson | Egyedi vagy nem egyedi, automatikusan rendezve | A nagyobb táblázatok ismételten átolvassák a vezető kulcsmezőket |
| Kivonatolt | Csak kulcs, hash algoritmussal | Egyedülálló | Nagyon nagy táblák, amelyeket mindig a teljes kulcs olvas be, például az adatbázisrekordok puffere |
A standard tábla az alapértelmezett, és a szekvenciális feldolgozást is támogatja. Egy hashelt tábla állandó értéken tartja az elérési időt, függetlenül attól, hogy hány sor van tárolva, ezért a teljesítményszabályok a következők: Nyílt SQL Rekordok pufferelésére ajánlom.
Belső táblázatok létrehozása
Számos módja van a belső táblázat létrehozásának. Nézzük őket egyenként...
1.A Típusutasítás használatával
Hozzunk létre most egy belső itab táblát a TYPE utasítással.
A szintaxis:
Types : begin of line, column1 type I, column2 type I, end of line.
Példa:
TYPES : begin of line, empno type I, empname(20) type c , end of line.
A TYPES utasítás a meghatározott struktúrasort hoz létre.
Egy belső tábla ittab létrehozásához használja a következő parancsot-
Data itab type line occurs 10.
Létrejön egy belső tábla itab a line szerkezetével. A belső tábla szerkezetének deklarálása mellett az OCCURS záradék azt is meghatározza, hogy hány táblabejegyzés kerül tárolásra a fő tárolóban (jelen esetben 10). A további rekordok a lapozási területre íródnak ki, és hatással lehetnek a teljesítményre
2. Egy másik táblázatra hivatkozva
Belső táblázatot létrehozhatsz egy meglévő táblázatra hivatkozva. A meglévő táblázat lehet egy szabványos táblázat. SAP táblázat, egy Z tábla vagy egy másik belső tábla.
Szintaxis-
Data <f> <type> [with header line].
Példa-
DATA itab TYPE line OCCURS 10 with header line.
Itt egy belső táblázat ittab jön létre a típussorból fejlécsorral. Kérjük, vegye figyelembe, hogy a „fejlécsorral” nem kötelező.
3. A meglévő Struktúrára hivatkozva
Szintaxis-
Data <f> LIKE <struct> occurs n [with header line].
Példa-
DATA itab LIKE sline OCCURS 10.
Itt egy itab tábla jön létre, amelynek szerkezete megegyezik az sline tábláéval.
4. Új struktúra létrehozásával
Most készítsünk egy belső táblát saját struktúrával. Itt a táblázat egy fejlécsorral jön létre, alapértelmezés szerint.
Szintaxis –
Data : Begin of <f> occurs <n>, <component declaration>, ................................, End of <f>.
Példa -
Data : Begin of itab occurs 10, column1 type I, column2(4) type C, column3 like mara-ernam, End of itab.
A belső tábla ittab létrejön
Egy üres táblázatnak kevés haszna van, ezért a következő szakasz sorokkal tölti fel.
Belső táblázatok feltöltése
Most, hogy sikeresen létrehoztunk néhány belső táblát, nézzük meg, hogyan tölthetjük fel azokat néhány rekorddal. Különféle módszerek állnak rendelkezésre a táblák feltöltésére
1.Adatok hozzáfűzése soronként
Az első elérhető módszer az APPEND utasítás használata.
Az APPEND utasítás használatával vagy hozzáadhatunk egy sort egy másik munkaterületről a belső táblázathoz, vagy hozzáadhatunk egy kezdő sort a belső táblához.
Szintaxis –
APPEND [<wa> TO / INITIAL LINE TO] <itable>.
Itt a munkaterület vagy az Initial Line hozzá van fűzve a belső táblához .
A SY-TABIX rendszerváltozó tartalmazza a hozzáfűzött sor indexét.
Példa:
Data: Begin of itab occurs 10, col1 type C, col2 type I, end of itab. Append initial line to itab.
Eredmények: ' ' 0'
A „kezdeti sorok” paranccsal egy, a típusának megfelelő értékkel inicializált sort hozunk létre a táblázatban. Itt a „col1” egy karakter, a „col2” pedig egy egész szám. Ezután az „APPEND kezdeti sor” paranccsal hozzáadunk egy, az oszlopok adattípusának megfelelően inicializált sort, azaz szóközt az „oszlop1” és 0-t a „oszlop2” számára.
2. A COLLECT utasítás használata
A COLLECT egy másik utasítás, amelyet a belső táblák feltöltésére használnak. Általában a COLLECT használatos, amikor sorokat szúr be egy belső táblázatba egyedi szabványos kulccsal.
Szintaxis-
COLLECT [<wa> INTO] <itable>.
Fejléc sorral rendelkező táblák esetén az INTO opció kimarad. Tegyük fel, hogy már van egy bejegyzés, amelynek kulcsa megegyezik azzal, amelyet hozzá akarsz fűzni, akkor nem kerül új sor a táblázatba, hanem mindkét bejegyzés numerikus mezői hozzáadódnak, és csak egy, a kulcsnak megfelelő bejegyzés található. . A SY-TABIX értéke az eredeti bejegyzés sorára módosul. Az Else COLLECT az APPEND-hez hasonlóan működik, és a SY-TABIX tartalmazza a feldolgozott sor indexét.
3. Az INSERT utasítás használata
Az INSERT utasítás egy sort/munkaterületet ad a belső táblához. Megadhatja azt a pozíciót, ahol az új sort hozzá kell adni, az INDEX záradék használatával az INSERT utasítással.
Szintaxis
INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].
Itt a munkaterület vagy KEZDETBETŰ LINE beillesztve a belső táblázatba az indexnél .
Belső táblázatok másolása
Egy belső tábla tartalma átmásolható egy másikba az APPEND függvénnyel. LINES vagy INSERT LINES utasítás. Egy egyszerűbb mód a következő szintaxisok bármelyikének használata.
MOVE <itab1> To <itab2>. OR <itab1> = <itab2>.
Ezek átmásolják az ITAB1 tartalmát az ITAB2-be. A fejlécsort tartalmazó belső táblák esetében a []-t kell használnunk, hogy megkülönböztessük a munkaterülettől. Tehát a fejlécsorral rendelkező belső táblázatok tartalmának másolásához a szintaxis a következő lesz:
itab1[] = itab2[].
Olvassa el a belső táblázatokat
Most már ismerjük a belső táblák létrehozását és adatokkal való feltöltését. Most megnézzük, hogyan használjuk fel az adatokat, vagy hogyan kérhetjük le azokat a belső táblákból.
1. A Loop -Endloop használata
A belső tábla elérésének vagy olvasásának egyik módja a LOOP-ENDLOOP használata.
Szintaxis
LOOP AT <itable> [INTO <wa>] ................................... ENDLOOP.
Ha itt azt mondod, hogy LOOP AT ITABLE, akkor a belső ITABLE tábla soronként beolvasásra kerül. Az adott sor oszlopainak értékeit a LOOP-ENDLOOP struktúra bármely részében elérheti. Az SY-SUBRC értéke a következőre van állítva 0, még akkor is, ha csak egy rekordot olvasnak be.
2. A READ használata
A belső tábla olvasásának másik módja a READ utasítás használata.
Szintaxis-
READ TABLE <itable> [INTO <wa>] INDEX <idx>.
Ez az utasítás beolvassa az aktuális sort vagy sorokat az index által megadott módon. A SY-TABIX értéke a beolvasott sor indexe. Ha a megadott indexű bejegyzés található, akkor a SY-SUBRC értéke 0. Ha a megadott index kisebb, mint 0, akkor futásidejű hiba történik. Ha a megadott index meghaladja a tábla méretét, akkor a SY-SUBRC értéke 4.
⚠️ Figyelmeztetés: READ TABLE … Az INDEX 0 futásidejű hibát okoz, ezért a futásidejűleg kiszámított indexet ellenőrizni kell az utasítás futtatása előtt.
Belső táblák törlése
Számos módja van a sorok törlésének egy belső táblából.
1. Sorok törlése hurokban.
Ez a legegyszerűbb módja a sorok törlésének.
Szintaxis
DELETE <ITABLE>.
Ez az állítás csak cikluson belül működik. Törli az aktuális sort. A hurokban lévő sorokat feltételesen törölheti, ha hozzáadja a WHERE záradék.
2.Sorok törlése az index segítségével.
Ez egy sor törlésére szolgál a belső táblából bármely ismert indexnél.
Szintaxis
DELETE <ITABLE> INDEX <IDX>.
A sor az indexszel törlésre kerül. A következő sor indexe 1-gyel csökken.
3. Ismétlődő sorok törlése.
A táblázat kulcsmezők szerinti rendezése után a rendszer eltávolítja az ismétlődő sorokat.
SORT itab BY col1. DELETE ADJACENT DUPLICATES FROM itab COMPARING col1.
Csak a szomszédos sorokat hasonlítja össze a rendszer, ezért a SORT utasításnak kell először lefutnia. A tábla teljes kiürítéséhez használd a CLEAR itab[] vagy a REFRESH itab parancsot.

