SAP ABAP interna tablica: Stvaranje, čitanje, popunjavanje, kopiranje i brisanje
⚡ Pametni sažetak
SAP ABAP interni objekti tablice sadrže podatke iz fiksne strukture za dinamičku upotrebu unutar programa. Ova stranica objašnjava radna područja, zaglavlja, četiri metode stvaranja i naredbe koje popunjavaju, kopiraju, čitaju i brišu retke tablice.

Što je interna tablica?
UNUTARNJI STOL koriste se za dobivanje podataka iz fiksne strukture za dinamičku upotrebu u ABAP-u. Svaki redak u internoj tablici ima istu strukturu polja. Glavna upotreba internih tablica je pohranjivanje i oblikovanje podataka iz tablice baze podataka unutar programa.
Unutarnji stol uvijek funkcionira zajedno s radnim prostorom, pa taj koncept dolazi sljedeći.
Što je radno područje?
Radna područja su pojedinačni retci podataka. Trebali bi imati isti format kao i bilo koja od internih tablica. Koristi se za obradu podataka u internoj tablici redak po redak.
Razlika između unutarnjeg stola i radnog prostora?
Slika govori tisuću riječi
Dijagram prikazuje tablicu koja sadrži mnogo redaka dok radno područje sadrži samo redak koji se trenutno obrađuje. Je li to radno područje kreirao sustav ili programer ovisi o vrsti tablice opisanoj u nastavku.
Vrste internih tablica
Postoje dvije vrste internih tablica.
- Interne tablice s linijom HEADER
- Interne tablice bez retka HEADER.
Interne tablice s retkom zaglavlja
- Ovdje sustav automatski stvara radno područje.
- Radno područje ima isti tip podataka kao interna tablica.
- Ovo radno područje naziva se linija ZAGLAVLJA.
- Ovdje se obavljaju sve promjene ili radnje na sadržaju tablice. Kao rezultat toga, zapisi se mogu izravno umetnuti u tablicu ili im se izravno može pristupiti iz interne tablice.
Interne tablice bez retka zaglavlja :
- Ovdje nema radnog područja povezanog sa stolom.
- Radno područje treba eksplicitno odrediti kada trebamo pristupiti takvim tablicama.
- Stoga se ovim tablicama ne može izravno pristupiti.
💡 Savjet: Tablica s linijom zaglavlja nosi isto ime za tablicu i njezino radno područje, što kod čini dvosmislenim. Novi programi trebali bi deklarirati tablicu bez linije zaglavlja i proslijediti eksplicitno radno područje.
Standardne, sortirane i hashirane interne tablice
Osim razlikovanja u zaglavlju, svaka interna tablica ima i vrstu tablice koja određuje kako se red pronalazi. Vrsta se odabire dodatkom TYPE STANDARD TABLE, TYPE SORTED TABLE ili TYPE HASHED TABLE i ima izravan utjecaj na vrijeme izvođenja.
| Vrsta tablice | Način pristupa | Ključ | Najbolje koristiti za |
|---|---|---|---|
| Standard | Indeks i ključ, s linearnim pretraživanjem po ključu | Nije jedinstveno | Sekvencijalna obrada i male tablice koje se čitaju s indeksom |
| Poredano | Indeks i ključ, s binarnim pretraživanjem ključa | Jedinstveno ili nejedinstveno, automatski se sortira | Veće tablice više puta čitaju vodeća ključna polja |
| Hash | Samo ključ, s algoritmom za hashiranje | Jedinstven | Vrlo velike tablice koje se uvijek čitaju punim ključem, kao što je međuspremnik zapisa baze podataka |
Standardna tablica je zadana i prikladna je za sekvencijalnu obradu. Hashirana tablica održava vrijeme pristupa konstantnim bez obzira na to koliko je redaka pohranjeno, zbog čega pravila performansi Otvori SQL preporučujem ga za međuspremanje zapisa.
Stvaranje internih tablica
Postoji mnogo načina za stvaranje interne tablice. Pogledajmo ih jednog po jednog-
1. Korištenjem naredbe tipa
Sada kreirajmo internu tablicu itab koristeći naredbu TYPE.
Sintaksa je –
Types : begin of line, column1 type I, column2 type I, end of line.
Primjer:
TYPES : begin of line, empno type I, empname(20) type c , end of line.
Izjava TYPES stvara liniju strukture kako je definirano.
Za stvarno stvaranje interne tablice itab upotrijebite sljedeću naredbu-
Data itab type line occurs 10.
Interna tablica itab kreirana je sa strukturom line. Osim deklariranja strukture interne tablice, klauzula OCCURS također definira koliko se unosa tablice održava u glavnoj pohrani (u ovom slučaju 10). Dodatni zapisi ispisuju se u područje straničenja i mogu utjecati na performanse
2.Pozivajući se na drugu tablicu
Internu tablicu možete stvoriti pozivanjem na postojeću tablicu. Postojeća tablica može biti standardna SAP stol, Z stol ili neki drugi interni stol.
Sintaksa-
Data <f> <type> [with header line].
Primjer-
DATA itab TYPE line OCCURS 10 with header line.
Ovdje se stvara interna tablica itab tipa linija s linijom zaglavlja. Napominjemo da "s retkom zaglavlja" nije obavezan.
3.Pozivajući se na postojeću strukturu
Sintaksa-
Data <f> LIKE <struct> occurs n [with header line].
Primjer-
DATA itab LIKE sline OCCURS 10.
Ovdje je kreirana tablica itab koja ima istu strukturu kao i sline
4. Stvaranjem nove strukture
Kreirajmo sada internu tablicu s vlastitom strukturom. Ovdje se tablica stvara s linijom zaglavlja, po defaultu.
Sintaksa –
Data : Begin of <f> occurs <n>, <component declaration>, ................................, End of <f>.
Primjer -
Data : Begin of itab occurs 10, column1 type I, column2(4) type C, column3 like mara-ernam, End of itab.
Stvorena je interna tablica itab
Prazna tablica je od male koristi, pa je sljedeći odjeljak popunjava retcima.
Popunjavanje internih tablica
Sada kada smo uspješno kreirali neke interne tablice, pogledajmo kako ih popuniti nekim zapisima. Postoje različite metode za popunjavanje tablica
1.Dodajte podatke redak po redak
Prva dostupna metoda je korištenje naredbe APPEND.
Korištenjem naredbe APPEND možemo ili dodati jedan redak iz drugog radnog područja u internu tablicu ili možemo dodati jedan početni redak u internu tablicu.
Sintaksa –
APPEND [<wa> TO / INITIAL LINE TO] <itable>.
Ovdje radno područje ili se početni redak dodaje internoj tablici .
Sistemska varijabla SY-TABIX sadrži indeks dodane linije.
Primjer:
Data: Begin of itab occurs 10, col1 type C, col2 type I, end of itab. Append initial line to itab.
Rezultati : ' ' '0'
Početni redovi dodaju redak inicijaliziran ispravnom vrijednošću za svoj tip u tablicu. Ovdje je stupac1 znak, a stupac2 cijeli broj. Zatim APPEND početni red dodaje redak inicijaliziran s obzirom na tip podataka stupaca, tj. prostor za stupac1 i 0 za stupac2.
2. Korištenje naredbe COLLECT
COLLECT je još jedan oblik iskaza koji se koristi za popunjavanje internih tablica. COLLECT se općenito koristi za umetanje redaka u internu tablicu s jedinstvenim standardnim ključem.
Sintaksa-
COLLECT [<wa> INTO] <itable>.
U slučaju tablica s retkom zaglavlja, opcija INTO je izostavljena. Pretpostavimo da već postoji unos koji ima ključ isti kao onaj koji pokušavate dodati, tada se novi red ne dodaje u tablicu, ali se dodaju numerička polja oba unosa i prisutan je samo jedan unos koji odgovara ključu . Vrijednost SY-TABIX mijenja se u redak izvornog unosa. Inače COLLECT djeluje slično kao APPEND, a SY-TABIX sadrži indeks obrađene linije.
3. Korištenje INSERT naredbe
INSERT izjava dodaje liniju/radno područje u internu tablicu. Možete navesti poziciju na kojoj će se dodati novi red pomoću klauzule INDEX s naredbom INSERT.
Sintaksa
INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].
Ovdje, radno područje ili INICIJAL LINE umetnut je u internu tablicu na indeksu .
Kopiranje internih tablica
Sadržaj jedne interne tablice može se kopirati u drugu pomoću naredbe APPEND. LINES ili UMETNI LINES naredba. Jednostavniji način je korištenje bilo koje od sljedećih sintaksi.
MOVE <itab1> To <itab2>. OR <itab1> = <itab2>.
Oni kopiraju sadržaj ITAB1 u ITAB2. U slučaju internih tablica s linijom zaglavlja moramo koristiti [] kako bismo ih razlikovali od radnog područja. Dakle, za kopiranje sadržaja internih tablica s linijom zaglavlja sintaksa postaje,
itab1[] = itab2[].
Pročitajte interne tablice
Sada smo upoznati s izradom internih tablica i njihovim popunjavanjem podacima. Sada ćemo vidjeti kako zapravo koristimo podatke ili dohvaćamo podatke iz internih tablica.
1. Korištenje Loop -Endloop
Jedan od načina pristupa ili čitanja interne tablice je korištenje LOOP-ENDLOOP.
Sintaksa
LOOP AT <itable> [INTO <wa>] ................................... ENDLOOP.
Ovdje kada kažete LOOP AT ITABLE, tada se interna tablica ITABLE čita red po red. Možete pristupiti vrijednostima stupaca za tu liniju tijekom bilo kojeg dijela strukture LOOP-ENDLOOP. Vrijednost SY-SUBRC postavljena je na 0, čak i ako se čita samo jedan zapis.
2. Korištenje READ
Druga metoda čitanja interne tablice je korištenje naredbe READ.
Sintaksa-
READ TABLE <itable> [INTO <wa>] INDEX <idx>.
Ova naredba čita trenutni redak ili redak kako je određeno indeksom Vrijednost SY-TABIX je indeks pročitanog retka. Ako se pronađe unos s navedenim indeksom, tada se SY-SUBRC postavlja na 0. Ako je navedeni indeks manji od 0, dolazi do pogreške tijekom izvođenja. Ako navedeni indeks premašuje veličinu tablice, tada se SY-SUBRC postavlja na 4.
⚠️ Upozorenje: READ TABLE … INDEX 0 izaziva grešku tijekom izvođenja, pa indeks izračunat tijekom izvođenja treba provjeriti prije izvršavanja naredbe.
Brisanje internih tablica
Postoji mnogo načina za brisanje redaka iz interne tablice.
1.Brisanje redaka u petlji.
Ovo je najjednostavniji način za brisanje linija.
Sintaksa
DELETE <ITABLE>.
Ova izjava radi samo unutar petlje. Briše trenutni redak. Možete uvjetno izbrisati retke u petlji dodavanjem WHERE klauzula.
2.Brisanje redaka pomoću indeksa.
Ovo se koristi za brisanje retka iz interne tablice na bilo kojem poznatom indeksu.
Sintaksa
DELETE <ITABLE> INDEX <IDX>.
Crta s indeksom se briše. Indeks sljedećeg retka smanjuje se za 1.
3. Brisanje dupliciranih redaka.
Duplicirani retci se uklanjaju nakon što je tablica sortirana prema ključnim poljima.
SORT itab BY col1. DELETE ADJACENT DUPLICATES FROM itab COMPARING col1.
Uspoređuju se samo susjedni retci, zbog čega se prvo mora izvršiti naredba SORT. Za potpuno ispraznjenje tablice upotrijebite CLEAR itab[] ili REFRESH itab.

