SAP Interne ABAP-Tabelle: Erstellen, Lesen, Füllen, Kopieren und Löschen
Was ist eine interne Tabelle?
INTERNE TABELLE werden verwendet, um Daten aus einer festen Struktur für die dynamische Verwendung in ABAP zu gewinnen. Jede Zeile der internen Tabelle hat die gleiche Feldstruktur. Interne Tabellen werden hauptsächlich zum Speichern und Formatieren von Daten aus einer Datenbanktabelle innerhalb eines Programms verwendet.
Was ist ein Arbeitsbereich?
Arbeitsbereiche sind einzelne Datenzeilen. Sie sollten das gleiche Format wie alle internen Tabellen haben. Es dient dazu, die Daten einer internen Tabelle zeilenweise zu verarbeiten.
Unterschied zwischen interner Tabelle und einem Arbeitsbereich?
Ein Bild sagt mehr als tausend Worte
Arten interner Tabellen
Es gibt zwei Arten von internen Tabellen.
- Interne Tabellen mit HEADER-Zeile
- Interne Tabellen ohne HEADER-Zeile.
Interne Tabellen mit Kopfzeile
- Dabei erstellt das System automatisch den Arbeitsbereich.
- Der Arbeitsbereich hat den gleichen Datentyp wie die interne Tabelle.
- Dieser Arbeitsbereich wird HEADER-Zeile genannt.
- Hier werden alle Änderungen oder Aktionen am Inhalt der Tabelle vorgenommen. Dadurch können Datensätze direkt in die Tabelle eingefügt oder direkt aus der internen Tabelle heraus aufgerufen werden.
Interne Tabellen ohne Kopfzeile :
- Hier ist der Tabelle kein Arbeitsbereich zugeordnet.
- Der Arbeitsbereich muss explizit angegeben werden, wenn auf solche Tabellen zugegriffen werden muss.
- Daher kann auf diese Tabellen nicht direkt zugegriffen werden.
Interne Tabellen erstellen
Es gibt viele Möglichkeiten, eine interne Tabelle zu erstellen. Schauen wir sie uns einzeln an.
1. Durch die Verwendung der Type-Anweisung
Lassen Sie uns nun eine interne Tabelle itab mit erstellen TYPE-Anweisung.
Die Syntax ist –
Types : begin of line, column1 type I, column2 type I, end of line.
Ejemplo:
TYPES : begin of line, empno type I, empname(20) type c , end of line.
Die TYPES-Anweisung erstellt eine Strukturlinie wie definiert.
Um tatsächlich eine interne Tabelle itab zu erstellen, verwenden Sie den folgenden Befehl:
Data itab type line occurs 10.
Es wird eine interne Tabelle itab mit der Struktur line erstellt. Neben der Deklaration der Struktur einer internen Tabelle definiert die OCCURS-Klausel auch, wie viele Tabelleneinträge im Hauptspeicher verwaltet werden (in diesem Fall 10). Zusätzliche Datensätze werden in den Paging-Bereich geschrieben und können sich auf die Leistung auswirken
2. Durch Bezugnahme auf eine andere Tabelle
Sie können eine interne Tabelle erstellen, indem Sie auf eine vorhandene Tabelle verweisen. Die vorhandene Tabelle könnte eine Standardtabelle sein. SAP Tabelle, eine Z-Tabelle oder eine andere interne Tabelle.
Syntax-
Data <f> <type> [with header line].
Beispiel-
DATA itab TYPE line OCCURS 10 with header line.
Dabei wird eine interne Tabelle itab vom Typ line mit einer Kopfzeile erstellt. Bitte beachten Sie, dass „mit Kopfzeile“ optional ist.
3. Durch Bezugnahme auf die bestehende Struktur
Syntax-
Data <f> LIKE <struct> occurs n [with header line].
Beispiel-
DATA itab LIKE sline OCCURS 10.
Hier wird eine Tabelle itab erstellt, die den gleichen Aufbau wie sline hat
4. Durch die Erstellung einer neuen Struktur
Lassen Sie uns nun eine interne Tabelle mit einer eigenen Struktur erstellen. Hier wird die Tabelle mit einer Kopfzeile erstellt, standardmäßig.
Syntax -
Data : Begin of <f> occurs <n>, <component declaration>, ................................., End of <f>.
Beispiel -
Data : Begin of itab occurs 10, column1 type I, column2(4) type C, column3 like mara-ernam, End of itab.
Die interne Tabelle itab wird erstellt
Befüllen interner Tabellen
Nachdem wir nun erfolgreich einige interne Tabellen erstellt haben, wollen wir sehen, wie wir sie mit einigen Datensätzen füllen. Zum Füllen von Tabellen stehen verschiedene Methoden zur Verfügung
1.Daten Zeile für Zeile anhängen
Die erste verfügbare Methode ist die Verwendung der APPEND-Anweisung.
Mit der APPEND-Anweisung können wir entweder eine Zeile aus einem anderen Arbeitsbereich zur internen Tabelle hinzufügen oder wir können eine Anfangszeile zur internen Tabelle hinzufügen.
Syntax -
APPEND [<wa> TO / INITIAL LINE TO] <itable>.
Hier Arbeitsbereich oder die Anfangszeile wird an die interne Tabelle angehängt .
Die Systemvariable SY-TABIX enthält den Index der angehängten Zeile.
Ejemplo:
Data: Begin of itab occurs 10, col1 type C, col2 type I, end of itab. Append initial line to itab.
Ergebnisse: ' ' '0'
Anfangszeilen fügt der Tabelle eine Zeile hinzu, die mit dem richtigen Wert für ihren Typ initialisiert wurde. Hier ist col1 ein Zeichen und col2 eine Ganzzahl. Dann fügt APPEND die Anfangszeile hinzu und fügt eine Zeile hinzu, die in Bezug auf den Datentyp der Spalten initialisiert wurde, dh Platz für Spalte 1 und 0 für Spalte 2.
2.Verwenden der COLLECT-Anweisung
COLLECT ist eine weitere Anweisungsform, die zum Füllen der internen Tabellen verwendet wird. Im Allgemeinen wird COLLECT beim Einfügen von Zeilen in eine interne Tabelle mit eindeutigem Standardschlüssel verwendet.
Syntax-
COLLECT [<wa> INTO] <itable>.
Bei Tabellen mit Kopfzeile wird die INTO-Option weggelassen. Angenommen, es gibt bereits einen Eintrag mit demselben Schlüssel wie den, den Sie anhängen möchten, dann wird der Tabelle keine neue Zeile hinzugefügt, sondern die numerischen Felder beider Einträge werden hinzugefügt und es ist nur ein Eintrag vorhanden, der dem Schlüssel entspricht . Der Wert von SY-TABIX wird in die Zeile des ursprünglichen Eintrags geändert. Sonst verhält sich COLLECT ähnlich wie APPEND und SY-TABIX enthält den Index der verarbeiteten Zeile.
3.Verwendung der INSERT-Anweisung
Die INSERT-Anweisung fügt der internen Tabelle eine Zeile/einen Arbeitsbereich hinzu. Sie können die Position angeben, an der die neue Zeile hinzugefügt werden soll, indem Sie die INDEX-Klausel mit der INSERT-Anweisung verwenden.
Syntax
INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].
Hier der Arbeitsbereich oder INITIAL LINE wird in die interne Tabelle eingefügt am Index .
Interne Tabellen kopieren
Der Inhalt einer internen Tabelle kann mit den Anweisungen APPEND LINES oder INSERT LINES in eine andere kopiert werden. Eine einfachere Möglichkeit besteht darin, eine der folgenden Syntaxen zu verwenden.
MOVE <itab1> To <itab2>. OR <itab1> = <itab2>.
Diese kopieren den Inhalt von ITAB1 nach ITAB2. Bei internen Tabellen mit Kopfzeile müssen wir zur Unterscheidung vom Arbeitsbereich [] verwenden. Um den Inhalt interner Tabellen mit der Kopfzeile zu kopieren, lautet die Syntax also:
itab1[] = itab2[].
Interne Tabellen lesen
Mit der Erstellung interner Tabellen und deren Befüllung mit Daten sind wir nun vertraut. Wir werden nun sehen, wie wir die Daten tatsächlich verwenden oder die Daten aus den internen Tabellen abrufen.
1. Verwenden von Loop-Endloop
Eine Möglichkeit, auf die interne Tabelle zuzugreifen oder sie zu lesen, ist die Verwendung von LOOP-ENDLOOP.
Syntax
LOOP AT <itable> [INTO <wa>] ................................... ENDLOOP.
Wenn Sie hier LOOP AT ITABLE sagen, wird die interne Tabelle ITABLE Zeile für Zeile gelesen. Sie können in jedem Teil der LOOP-ENDLOOP-Struktur auf die Werte der Spalten für diese Zeile zugreifen. Der Wert von SY-SUBRC wird auf gesetzt 0, auch wenn nur ein Datensatz gelesen wird.
2. Verwenden von READ
Die andere Methode zum Lesen der internen Tabelle ist die Verwendung der READ-Anweisung.
Syntax-
READ TABLE <itable> [INTO <wa>] INDEX <idx>.
Diese Anweisung liest die aktuelle Zeile oder die durch den Index angegebene Zeile . Der Wert von SY-TABIX ist der Index der gelesenen Zeile. Wenn ein Eintrag mit dem angegebenen Index gefunden wird, wird SY-SUBRC auf 0 gesetzt. Wenn der angegebene Index kleiner als 0 ist, tritt ein Laufzeitfehler auf. Wenn der angegebene Index die Tabellengröße überschreitet, wird SY-SUBRC auf 4 gesetzt.
Interne Tabellen löschen
Es gibt viele Möglichkeiten, Zeilen aus einer internen Tabelle zu löschen.
1.Zeilen in einer Schleife löschen.
Dies ist die einfachste Möglichkeit, Zeilen zu löschen.
Syntax
DELETE <ITABLE>.
Diese Anweisung funktioniert nur innerhalb einer Schleife. Es löscht die aktuelle Zeile. Sie können die Zeilen in einer Schleife bedingt löschen, indem Sie Folgendes hinzufügen WHERE-Klausel.
2.Löschen von Zeilen mithilfe des Index.
Dies wird verwendet, um eine Zeile aus der internen Tabelle an einem beliebigen bekannten Index zu löschen.
Syntax
DELETE <ITABLE> INDEX <IDX>.
Die Zeile mit dem Index wird gelöscht. Der Index der folgenden Zeile wird um 1 dekrementiert.