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.

  • 📋 Osnovna definicija: Interna tablica pohranjuje retke identične strukture u glavnu memoriju, najčešće za formatiranje podataka pročitanih iz tablice baze podataka.
  • 🧾 Uloga u radnom području: Radno područje je jedan redak istog formata kao i tablica, a obrađuje tablicu redak po redak.
  • 🏷️ Zaglavlje: Tablica s linijom zaglavlja dobiva implicitno radno područje, tako da se retci mogu izravno umetati ili čitati bez imenovanja.
  • 🛠️ Četiri metode stvaranja: Naredba TYPES, referenca na postojeću tablicu, referenca na postojeću strukturu ili nova struktura deklarirana s OCCURS.
  • Naseliti: Naredba APPEND dodaje jedan redak, COLLECT agregira numerička polja za duplicirani ključ, a INSERT smješta redak na odabrani indeks.
  • 🔍 Čitaj i kopiraj: LOOP AT čita svaki redak, READ TABLE čita jedan redak po indeksu, a MOVE ili znak jednakosti kopira cijelu tablicu.
  • 🗑️ Izbrisati: DELETE unutar petlje uklanja trenutni redak, a DELETE ... INDEX uklanja redak na poznatoj poziciji.

SAP ABAP interne 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

Razlika između unutarnjeg stola i radnog područja

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.

  1. Interne tablice s linijom HEADER
  2. 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.

Pitanja i odgovori

CLEAR itab prazni samo zaglavlje, a CLEAR itab[] prazni tijelo. REFRESH uvijek prazni tijelo, ali memoriju čuva rezerviranom. FREE prazni tijelo i oslobađa memoriju.

SY-TABIX sadrži broj retka interne tablice koja se trenutno obrađuje. SY-INDEX sadrži prolazni broj DO ili WHILE petlje. Hashirana tablica ostavlja SY-TABIX na nuli jer nema indeks.

PETLJA U itab DODJELJIVANJE simbola polja izbjegava kopiranje svakog retka u radno područje, pa se brže izvodi na velikim tablicama i omogućuje promjenu retka na mjestu bez naredbe MODIFY.

Da. AI asistenti u ABAP razvojnim alatima prepisuju OCCURS i deklaracije zaglavlja u TYPE STANDARD TABLE OF s eksplicitnim radnim područjem i označavaju naredbe koje se prekidaju nakon što zaglavlje nestane.

Savjetnici za performanse umjetne inteligencije provjeravaju kako se tablica popunjava i čita, a zatim preporučuju sortiranu ili hashiranu tablicu kada linearno pretraživanje dominira tijekom izvođenja. Preporuka se potvrđuje s trace u transakciji SAT.

Sažmite ovu objavu uz: