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.

  • 📋 Alapvető definíció: Egy belső tábla azonos szerkezetű sorokat tárol a főmemóriában, leggyakrabban az adatbázistáblából beolvasott adatok formázására.
  • 🧾 Munkaterület szerepkör: A munkaterület egyetlen sor, amelynek formátuma megegyezik a táblázatéval, és a táblázatot soronként dolgozza fel.
  • 🏷️ Fejlécsor: Egy fejléccel rendelkező táblázat implicit munkaterületet kap, így a sorok közvetlenül beilleszthetők vagy olvashatók név megadása nélkül.
  • 🇧🇷 Négy létrehozási módszer: TYPES utasítás, hivatkozás egy meglévő táblára, hivatkozás egy meglévő struktúrára, vagy egy OCCURS utasítással deklarált új struktúra.
  • Benépesít: Az APPEND függvény egy sort ad hozzá, a COLLECT aggregálja a numerikus mezőket egy ismétlődő kulcshoz, az INSERT pedig egy sort helyez el a kiválasztott indexen.
  • 🔍 Olvasás és másolás: A LOOP AT minden sort beolvas, a READ TABLE indexenként egy sort olvas be, a MOVE vagy az egyenlőségjel pedig egy egész táblázatot másol.
  • 🗑️ Töröl: Egy LOOP-on belüli DELETE eltávolítja az aktuális sort, a DELETE … INDEX pedig egy ismert pozíciójú sort távolít el.

SAP ABAP belső táblázatok

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

Különbség a belső asztal és a munkaterület között

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.

  1. Belső táblázatok HEADER sorral
  2. 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.

GYIK

A CLEAR itab csak a fejléc sort üríti ki, a CLEAR itab[] pedig a törzset. A REFRESH mindig kiüríti a törzset, de a memóriát fenntartja. A FREE kiüríti a törzset és felszabadítja a memóriát is.

Az SY-TABIX a jelenleg feldolgozott belső tábla sorszámát tartalmazza. Az SY-INDEX egy DO vagy WHILE ciklus menetszámát tartalmazza. Egy hashelt tábla az SY-TABIX-ot nullán hagyja, mivel nincs indexe.

LOOP AT ITAB UTÁN MEZŐSZIMBÓLUM HOZZÁRENDELÉSE elkerüli az összes sor munkaterületre másolását, így gyorsabban fut nagy táblázatokon, és lehetővé teszi a sor helybeni módosítását MODIFY utasítás nélkül.

Igen. Az ABAP fejlesztőeszközökben található mesterséges intelligencia asszisztensek átírják az OCCURS és a fejlécsor deklarációit TYPE STANDARD TABLE OF formátumba egy explicit munkaterülettel, és megjelölik azokat az utasításokat, amelyek a fejlécsor eltűnése után megszakadnak.

Az AI teljesítmény-tanácsadói megvizsgálják, hogyan töltődik ki és olvasódik be egy tábla, majd rendezett vagy hashelt táblát javasolnak, ha a futási környezetet lineáris keresés uralja. Az ajánlást egy trace a SAT tranzakcióban.

Foglald össze ezt a bejegyzést a következőképpen: