SAP Interne ABAP-Tabelle: Erstellen, Lesen, Füllen, Kopieren und Löschen

⚡ Intelligente Zusammenfassung

SAP ABAP-interne Tabellenobjekte speichern Daten aus einer festen Struktur zur dynamischen Verwendung innerhalb eines Programms. Diese Seite erläutert Arbeitsbereiche, Kopfzeilen, die vier Erstellungsmethoden sowie die Anweisungen zum Füllen, Kopieren, Lesen und Löschen von Tabellenzeilen.

  • 📋 Kerndefinition: Eine interne Tabelle speichert Zeilen identischer Struktur im Hauptspeicher, meistens um Daten zu formatieren, die aus einer Datenbanktabelle gelesen werden.
  • 🧾 Aufgabenbereich: Ein Arbeitsbereich ist eine einzelne Zeile mit dem gleichen Format wie die Tabelle und verarbeitet die Tabelle Zeile für Zeile.
  • 🏷️ Kopfzeile: Eine Tabelle mit einer Kopfzeile erhält einen impliziten Arbeitsbereich, sodass Zeilen direkt eingefügt oder gelesen werden können, ohne einen solchen benennen zu müssen.
  • Vier Schöpfungsmethoden: TYPES-Anweisung, Verweis auf eine bestehende Tabelle, Verweis auf eine bestehende Struktur oder eine mit OCCURS deklarierte neue Struktur.
  • Bevölkern: APPEND fügt eine Zeile hinzu, COLLECT aggregiert numerische Felder für einen doppelten Schlüssel, und INSERT fügt eine Zeile an einem ausgewählten Index ein.
  • 🔍 Lesen und Kopieren: LOOP AT liest jede Zeile, READ TABLE liest eine Zeile anhand des Index, und MOVE oder das Gleichheitszeichen kopiert eine ganze Tabelle.
  • 🗑️ Löschen: DELETE innerhalb einer LOOP entfernt die aktuelle Zeile, und DELETE … INDEX entfernt die Zeile an einer bekannten Position.

SAP ABAP-interne Tabellen

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.

Ein Innentisch arbeitet immer mit einem Arbeitsbereich zusammen, daher folgt dieses Konzept als nächstes.

Was ist ein Arbeitsbereich?

Arbeitsbereiche bestehen aus einzelnen Datenzeilen. Sie sollten dasselbe Format wie die internen Tabellen aufweisen. Sie dienen dazu, die Daten einer internen Tabelle zeilenweise zu verarbeiten.

Unterschied zwischen einem internen Tisch und einem Arbeitsbereich?

Ein Bild sagt mehr als tausend Worte

Unterschied zwischen interner Tabelle und einem Arbeitsbereich

Das Diagramm zeigt die Tabelle mit vielen Zeilen, während der Arbeitsbereich nur die aktuell verarbeitete Zeile enthält. Ob dieser Arbeitsbereich vom System oder vom Entwickler erstellt wird, hängt vom unten beschriebenen Tabellentyp ab.

Arten interner Tabellen

Es gibt zwei Arten von internen Tabellen.

  1. Interne Tabellen mit HEADER-Zeile
  2. 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.

💡 Tipp: Eine Tabelle mit Kopfzeile hat denselben Namen für die Tabelle und ihren Arbeitsbereich, was zu Mehrdeutigkeiten im Code führt. Neue Programme sollten eine Tabelle ohne Kopfzeile deklarieren und einen expliziten Arbeitsbereich angeben.

Standardisierte, sortierte und gehashte interne Tabellen

Neben der Unterscheidung der Kopfzeile besitzt jede interne Tabelle auch einen Tabellentyp, der festlegt, wie eine Zeile gefunden wird. Der Typ wird mit dem Zusatz TYPE STANDARD TABLE, TYPE SORTED TABLE oder TYPE HASHED TABLE ausgewählt und hat direkte Auswirkungen auf die Laufzeit.

Tischart Zugriffsmethode Wesentliche am besten geeignet für
Standard Index und Schlüssel, mit einer linearen Suche auf dem Schlüssel Nicht eindeutig Sequenzielle Verarbeitung und Lesen kleiner Tabellen mit einem Index
Sortiert Index und Schlüssel, mit einer binären Suche auf dem Schlüssel Eindeutig oder nicht eindeutig, automatisch sortiert Größere Tabellen lesen die führenden Schlüsselfelder wiederholt ein.
Hashed Nur Schlüssel, mit einem Hash-Algorithmus So einzigartig wie Sie: Sehr große Tabellen, die immer über den vollständigen Schlüssel gelesen werden, wie beispielsweise ein Puffer von Datenbankeinträgen

Eine Standardtabelle ist der Standard und eignet sich für die sequentielle Verarbeitung. Eine Hashtabelle hält die Zugriffszeit konstant, unabhängig von der Anzahl der gespeicherten Zeilen, weshalb die Leistungsregeln von Öffnen Sie SQL Ich empfehle es zum Zwischenspeichern von Datensätzen.

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

Erstellen wir nun eine interne Tabelle itab mithilfe der 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 bestehende Tabelle verweisen. Die bestehende 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 dieselbe Struktur wie sline aufweist.

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

Eine leere Tabelle ist wenig nützlich, deshalb wird sie im nächsten Abschnitt mit Zeilen gefüllt.

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'

Initialzeilen fügt der Tabelle eine Zeile hinzu, die mit dem korrekten Wert für ihren Datentyp initialisiert ist. Hierbei ist col1 ein Zeichen und col2 eine Ganzzahl. Anschließend fügt APPEND Initialzeile eine Zeile hinzu, die entsprechend dem Datentyp der Spalten initialisiert ist, d. h. Leerzeichen für col1 und 0 für col2.

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 Initialen LINE wird in interne Tabelle eingefügt bei Index Die

Interne Tabellen kopieren

Der Inhalt einer internen Tabelle kann mithilfe der APPEND-Funktion in eine andere kopiert werden. LINES oder EINFÜGEN LINES-Anweisung. Eine einfachere Möglichkeit besteht darin, eine der folgenden Syntaxvarianten 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

Wir kennen nun die Erstellung von internen Tabellen und deren Befüllung mit Daten. Im Folgenden sehen wir uns an, wie wir die Daten tatsächlich verwenden oder 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. Wird ein Eintrag mit dem angegebenen Index gefunden, wird SY-SUBRC auf 0 gesetzt. Ist der angegebene Index kleiner als 0, tritt ein Laufzeitfehler auf. Überschreitet der angegebene Index die Tabellengröße, wird SY-SUBRC auf 4 gesetzt.

⚠️ Warnung: READ TABLE … INDEX 0 führt zu einem Laufzeitfehler, daher sollte ein zur Laufzeit berechneter Index vor der Ausführung der Anweisung überprüft werden.

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.

3. Löschen von doppelten Zeilen.

Doppelte Zeilen werden entfernt, nachdem die Tabelle anhand der Schlüsselfelder sortiert wurde.

SORT itab BY col1.

DELETE ADJACENT DUPLICATES FROM itab COMPARING col1.

Es werden nur benachbarte Zeilen verglichen, weshalb die SORT-Anweisung zuerst ausgeführt werden muss. Um die Tabelle vollständig zu leeren, verwenden Sie CLEAR itab[] oder REFRESH itab.

Häufig gestellte Fragen

CLEAR itab leert nur die Kopfzeile, und CLEAR itab[] leert den Inhalt. REFRESH leert immer den Inhalt, behält aber den reservierten Speicher. FREE leert den Inhalt und gibt zusätzlich den Speicher frei.

SY-TABIX speichert die Zeilennummer der aktuell verarbeiteten internen Tabelle. SY-INDEX speichert die Durchlaufnummer einer DO- oder WHILE-Schleife. Bei einer Hash-Tabelle ist SY-TABIX auf Null gesetzt, da sie keinen Index besitzt.

LOOP AT itab ASSIGNING a field symbol avoids the copying every row into a work area, so it runs faster on large tables and allows the row to change place without a MODIFY statement.

Ja. KI-Assistenten in ABAP-Entwicklungswerkzeugen schreiben OCCURS- und Kopfzeilendeklarationen in TYPE STANDARD TABLE OF mit einem expliziten Arbeitsbereich um und kennzeichnen die Anweisungen, die nach dem Verschwinden der Kopfzeile abbrechen.

KI-Leistungsberater analysieren, wie eine Tabelle gefüllt und gelesen wird, und empfehlen dann eine sortierte oder gehashte Tabelle, wenn eine lineare Suche die Laufzeit dominiert. Die Empfehlung wird durch eine trace in Transaktion SAT.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: