SAP Interní tabulka ABAP: Vytvořit, Číst, Naplňovat, Kopírovat a Smazat
Co je to interní tabulka?
VNITŘNÍ TABULKA se používají k získávání dat z pevné struktury pro dynamické použití v ABAP. Každý řádek v interní tabulce má stejnou strukturu polí. Hlavní použití pro interní tabulky je pro ukládání a formátování dat z databázové tabulky v rámci programu.
Co je pracovní oblast?
Pracovní oblasti jsou jednotlivé řádky dat. Měly by mít stejný formát jako kterákoli z interních tabulek. Používá se ke zpracování dat v interní tabulce jeden řádek po druhém.
Rozdíl mezi vnitřním stolem a pracovním prostorem?
Obrázek řekne tisíc slov
Typy interních tabulek
Existují dva typy interních tabulek.
- Interní tabulky s řádkem HEADER
- Interní tabulky bez řádku HEADER.
Interní tabulky s řádkem záhlaví
- Zde systém automaticky vytvoří pracovní oblast.
- Pracovní oblast má stejný datový typ jako interní tabulka.
- Tato pracovní oblast se nazývá řada HEADER.
- Zde jsou provedeny všechny změny nebo jakákoli akce na obsahu tabulky. V důsledku toho lze záznamy přímo vkládat do tabulky nebo k nim přistupovat přímo z interní tabulky.
Interní tabulky bez řádku záhlaví :
- Zde není žádná pracovní oblast spojená se stolem.
- Pracovní oblast musí být explicitně specifikována, když potřebujeme k takovým tabulkám přistupovat.
- K těmto tabulkám tedy nelze přistupovat přímo.
Vytváření interních tabulek
Existuje mnoho způsobů, jak vytvořit interní tabulku. Pojďme se na ně podívat jeden po druhém -
1. Pomocí příkazu typu
Pojďme nyní vytvořit interní tabulku itab pomocí příkaz TYPE.
Syntaxe je –
Types : begin of line, column1 type I, column2 type I, end of line.
Příklad:
TYPES : begin of line, empno type I, empname(20) type c , end of line.
Příkaz TYPES vytvoří definovaný řádek struktury.
Chcete-li skutečně vytvořit interní tabulku itab, použijte následující příkaz-
Data itab type line occurs 10.
Je vytvořena interní tabulka itab se strukturou line. Kromě deklarace struktury interní tabulky klauzule OCCURS také definuje, kolik položek tabulky je udržováno v hlavním úložišti (v tomto případě 10). Další záznamy se zapisují do stránkovací oblasti a mohou ovlivnit výkon
2.Odkazem na jinou tabulku
Interní tabulku můžete vytvořit odkazem na existující tabulku. Stávající stůl by mohl být standardem SAP tabulka, tabulka Z nebo jiná interní tabulka.
Syntax-
Data <f> <type> [with header line].
Příklad-
DATA itab TYPE line OCCURS 10 with header line.
Zde je vytvořena vnitřní tabulka itab typu řádek s řádkem záhlaví. Upozorňujeme, že „s řádkem záhlaví“ je nepovinné.
3. Odkazem na stávající strukturu
Syntax-
Data <f> LIKE <struct> occurs n [with header line].
Příklad-
DATA itab LIKE sline OCCURS 10.
Zde se vytvoří tabulka itab, která má stejnou strukturu jako sline
4. Vytvořením nové struktury
Vytvořme nyní vnitřní tabulku s vlastní strukturou. Zde je tabulka vytvořena s řádkem záhlaví, Ve výchozím nastavení.
Syntaxe –
Data : Begin of <f> occurs <n>, <component declaration>, ................................., End of <f>.
Příklad -
Data : Begin of itab occurs 10, column1 type I, column2(4) type C, column3 like mara-ernam, End of itab.
Vytvoří se interní tabulka itab
Naplňování interních tabulek
Nyní, když jsme úspěšně vytvořili některé interní tabulky, podívejme se, jak je naplníme nějakými záznamy. K naplnění tabulek jsou k dispozici různé metody
1.Připojte data řádek po řádku
První dostupnou metodou je použití příkazu APPEND.
Pomocí příkazu APPEND můžeme buď přidat jeden řádek z jiné pracovní oblasti do interní tabulky, nebo můžeme přidat jeden počáteční řádek do interní tabulky.
Syntaxe –
APPEND [<wa> TO / INITIAL LINE TO] <itable>.
Zde pracovní oblast nebo Počáteční řádek je připojen k interní tabulce .
Systémová proměnná SY-TABIX obsahuje index připojeného řádku.
Příklad:
Data: Begin of itab occurs 10, col1 type C, col2 type I, end of itab. Append initial line to itab.
Výsledky: ' ' '0'
Počáteční řádky přidá do tabulky řádek inicializovaný správnou hodnotou pro jeho typ. Zde je col1 znak a col2 je celé číslo. Poté APPEND počáteční řádek přidá řádek inicializovaný s ohledem na datový typ sloupců, tj. mezeru pro sloupec1 a 0 pro sloupec2.
2. Použití příkazu COLLECT
COLLECT je další forma příkazu používaná k naplnění interních tabulek. Obecně se COLLECT používá při vkládání řádků do vnitřní tabulky s jedinečným standardním klíčem.
Syntax-
COLLECT [<wa> INTO] <itable>.
V případě tabulek s řádkem záhlaví je vynechána volba INTO. Předpokládejme, že již existuje záznam, který má klíč stejný jako ten, který se pokoušíte připojit, pak se do tabulky nepřidá nový řádek, ale přidají se číselná pole obou záznamů a je přítomen pouze jeden záznam odpovídající klíči. . Hodnota SY-TABIX se změní na řádek původní položky. Else COLLECT funguje podobně jako APPEND a SY-TABIX obsahuje index zpracovávaného řádku.
3.Použití příkazu INSERT
Příkaz INSERT přidá řádek/pracovní oblast do vnitřní tabulky. Pozici, na kterou má být přidán nový řádek, můžete určit pomocí klauzule INDEX s příkazem INSERT.
Syntax
INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].
Tady pracovní oblast nebo POČÁTEČNÍ ŘÁDEK se vloží do vnitřní tabulky na indexu .
Kopírování interních tabulek
Obsah jedné interní tabulky lze zkopírovat do jiné pomocí příkazu APPEND LINES nebo INSERT LINES. Jednodušší způsob je použít kteroukoli z následujících syntaxí.
MOVE <itab1> To <itab2>. OR <itab1> = <itab2>.
Ty zkopírují obsah ITAB1 do ITAB2. V případě interních tabulek s řádkem záhlaví musíme použít [], abychom je odlišili od pracovní oblasti. Takže pro kopírování obsahu interních tabulek s řádkem záhlaví se syntaxe stane,
itab1[] = itab2[].
Přečtěte si interní tabulky
Nyní jsme obeznámeni s tvorbou interních tabulek a jejich naplňováním daty. Nyní se podíváme, jak data skutečně použijeme nebo načteme data z interních tabulek.
1. Pomocí Loop -Endloop
Jedním ze způsobů přístupu nebo čtení vnitřní tabulky je použití LOOP-ENDLOOP.
Syntax
LOOP AT <itable> [INTO <wa>] ................................... ENDLOOP.
Když zde řeknete LOOP AT ITABLE, pak se vnitřní tabulka ITABLE čte řádek po řádku. K hodnotám sloupců pro tento řádek můžete přistupovat během kterékoli části struktury LOOP-ENDLOOP. Hodnota SY-SUBRC je nastavena na 0, i když je přečten pouze jeden záznam.
2. Pomocí READ
Další metodou čtení vnitřní tabulky je použití příkazu READ.
Syntax-
READ TABLE <itable> [INTO <wa>] INDEX <idx>.
Tento příkaz přečte aktuální řádek nebo řádek určený indexem . Hodnota SY-TABIX je index přečteného řádku. Pokud je nalezena položka se zadaným indexem, pak se SY-SUBRC nastaví na 0. Pokud je zadaný index menší než 0, dojde k chybě za běhu. Pokud zadaný index překročí velikost tabulky, pak se SY-SUBRC nastaví na 4.
Mazání interních tabulek
Existuje mnoho způsobů, jak odstranit řádky z interní tabulky.
1. Mazání řádků ve smyčce.
Toto je nejjednodušší způsob mazání řádků.
Syntax
DELETE <ITABLE>.
Tento příkaz funguje pouze v rámci smyčky. Vymaže aktuální řádek. Řádky ve smyčce můžete podmíněně odstranit přidáním klauzule WHERE.
2. Mazání řádků pomocí indexu.
To se používá k odstranění řádku z interní tabulky na jakémkoli známém indexu.
Syntax
DELETE <ITABLE> INDEX <IDX>.
Řádek s indexem je smazán. Index následujícího řádku se sníží o 1.