Wie Sie mit internen Tabellen arbeiten, z. B. Datensätze aus einer Datenbanktabelle in eine interne Tabelle übertragen und diese dort verarbeiten, erfahren Sie in diesem Kapitel.
12 Interne Tabellen 

Tabellen auf der Datenbank? Kein Problem. Tabellen im Arbeitsspeicher? Nie gehört. Im SAP-System gibt es beides. In diesem Kapitel werden Sie die Tabellen im Arbeitsspeicher kennen und schätzen lernen.
Bisher haben Sie Datenbanktabellen und Workareas kennengelernt. Die Struktur einer Datenbanktabelle oder Feldleiste haben Sie über die Struktur der Datenbanktabelle im ABAP Dictionary festgelegt und bei Workareas lediglich darauf verwiesen. Damit waren die Strukturen von Workareas und Datenbanktabellen in den bisherigen Beispielen identisch. Das ABAP Dictionary ist allerdings nur eine von zwei Möglichkeiten, wie Sie Strukturen deklarieren können.
Die andere Möglichkeit besteht in den ABAP-Programmen direkt: Während die Struktur im ABAP Dictionary dauerhaft gespeichert bleibt, existiert die Struktur im ABAP-Quellcode nur temporär. Sie wird erst beim Aufruf des Programms deklariert; dann werden die nötigen Speicherbereiche reserviert, und die Struktur ist nur während der Laufzeit des ABAP-Programms im Arbeitsspeicher vorhanden. Arbeitsbereiche können während der Programmausführung gefüllt und verändert werden. Endet das Programm, werden alle reservierten Speicherbereiche wieder freigegeben und gegebenenfalls gelöscht bzw. überschrieben.
Die internen Tabellen verhalten sich genau wie die in ABAP deklarierten Strukturen. Der Unterschied ist lediglich, dass eine temporäre Struktur – ein Arbeitsbereich – nur eine Zeile hat, während eine interne Tabelle beliebig viele Zeilen haben kann. Alle Zeilen der internen Tabelle haben wie bei einer Datenbanktabelle dieselbe Struktur, d. h. denselben Zeilenaufbau.
12.1 Sinn und Zweck interner Tabellen 

Interne Tabellen werden im ABAP-Quellcode deklariert und sind folglich ebenfalls nur temporär im Arbeitsspeicher vorhanden. Beim Programmstart werden die internen Tabellen deklariert, während der Programmverarbeitung modifiziert, und nach dem Programmende sind sowohl Inhalte als auch Struktur nicht mehr vorhanden. Zwischenergebnisse oder Berechnungen für Listausgaben etc. sind damit nicht gespeichert. Dies ist auch nicht nötig, da die Endergebnisse möglichst in einem anderen Medium – einer Ausgabeliste, einem Beleg, einer Datei, auf einem Datenträger oder in einer Datenbanktabelle – abgelegt wurden. Darüber hinaus liegen die zur Berechnung erforderlichen Daten nach wie vor auf der Datenbank, sodass die Endergebnisse jederzeit reproduzierbar sind.
[+] Verarbeitungsgeschwindigkeit
Immer wenn Sie komplexe Datenstrukturen oder große Datenmengen in Form von strukturierten Datensätzen verarbeiten möchten, haben interne Tabellen Vorteile hinsichtlich der Verarbeitungsgeschwindigkeit. Da die internen Tabellen im Arbeitsspeicher liegen, erfolgt der Zugriff auf eine Tabellenzeile oder auf ein Tabellenfeld einer internen Tabelle wesentlich schneller als der Zugriff auf eine Datenbanktabelle.
Interne Tabellen können beliebig deklarierte Strukturen enthalten. So könnte man beispielsweise die Strukturen mehrerer Datenbanktabellen in der Struktur einer internen Tabelle zusammenfassen. Es wäre aber auch möglich, die Struktur der internen Tabelle ausschließlich aus Feldern zusammenzusetzen, die nur im ABAP-Programm deklariert sind. Auch Mischformen sind möglich, bei denen Dictionary-Strukturen um programmspezifische Felder ergänzt werden.
Auf diese Weise lässt sich ein Datensatz beispielsweise so aufbauen, dass alle relevanten Daten dieses Satzes in einer einzigen internen Tabellenzeile liegen. Dabei ist es dann unerheblich, aus wie vielen Datenbanktabellen und ergänzenden Berechnungen die Felder der internen Tabellenzeile ursprünglich gefüllt wurden. Der vollständige Satz lässt sich von hier aus einfach verarbeiten, drucken etc. Zudem sind Sortierungen der gesamten internen Tabelle nach spezifischen Kriterien problemlos möglich, beispielsweise für bestimmte Formulare oder Listen.
Den Inhalt einer internen Tabelle kann man auch als den Tabellenrumpf bezeichnen. Früher besaßen interne Tabellen zusätzlich zu ihrem Tabellenrumpf eine sogenannte Kopfzeile, die ohne explizite Deklaration eines zusätzlichen Datenobjektes die Funktion einer Workarea erfüllte, doch dieses Konstrukt ist obsolet und wird nur noch aus Kompatibilitätsgründen unterstützt. Heute verwendet man dafür eine explizit deklarierte Workarea. Im Tabellenrumpf stehen die Tabellenzeilen; eine Tabellenzeile entspricht einem Datensatz. Wie bei einer Datenbanktabelle haben alle Zeilen denselben Aufbau und dieselbe Struktur. Für die lesende Verarbeitung von Datensätzen muss jeder Datensatz aus dem Tabellenrumpf in die Workarea bzw. Kopfzeile gestellt werden; von dort aus erfolgt dann die Weiterverarbeitung. Bei der schreibenden Verarbeitung bereiten wir eine Zeile zuerst in der Workarea auf und übertragen sie anschließend an den Tabellenrumpf, indem wir sie anhängen oder einfügen.
Häufig erfolgen diese Verarbeitungsarten in einer Schleife für alle Zeilen. Doch die Verarbeitung einzelner Sätze ist natürlich ebenso möglich.
Die nunmehr obsolete Arbeitsweise mit Kopfzeilen ähnelte dem ebenfalls in modernem ABAP verbotenen Arbeiten mit der TABLES-Anweisung: In beiden Fällen wird implizit eine Workarea deklariert, die den gleichen Namen besitzt wie die (interne oder transparente) Tabelle und den Zugriff darauf über Kurzformen der entsprechenden ABAP-Anweisungen erlaubt. Einerseits erspart dies dem Entwickler Tipparbeit – andererseits gilt heute Code, bei dem sich Aspekte wie Workarea und Tabellenobjekt so stark vermengen wie in diesen Konstrukten, als wenig transparent und schlecht zu warten.
Zudem eröffnet das Trennen von Tabellenrumpf und Workarea neue Möglichkeiten: Beispielsweise kann man damit interne Tabellen anlegen, deren Zeilentyp wiederum eine interne Tabelle ist. Mehrdimensionale Tabellenverarbeitung ist mit mehreren Workareas technisch kein Problem mehr. Mit einer einzigen Kopfzeile wäre die Welt in dieser Beziehung zweidimensional geblieben. n-dimensionale Tabellenverarbeitung ist allerdings ein spezielles Thema, auf das hier nicht weiter eingegangen werden kann.
[+] Einfacher Umgang mit Feldern
Der Umgang mit Feldern interner Tabellen gleicht dem Umgang mit Feldern von Datenbanktabellen. Die Felder einer internen Tabelle werden ebenfalls mit Tabellenname-Feldname angesprochen. Vergessen Sie nicht, dass Sie damit – ähnlich wie bei einer Datenbanktabelle – auch immer nur den Feldinhalt ansprechen, der aktuell in der Workarea bzw. Kopfzeile steht. Bereits vor dem Zugriff muss der Arbeitsbereich entsprechend gefüllt sein.
Grundsätzlich kann eine interne Tabelle beliebig viele Zeilen haben. Die Grenzen setzt einerseits die SAP-Architektur bei ca. zwei Gigabytes und andererseits die Systeminstallation insgesamt mit ihren Rahmenbedingungen von Hardware, Betriebssystem etc.
[ ! ] Verarbeitungsgeschwindigkeit
Natürlich muss man aber auch darauf hinweisen, dass die Verarbeitungsgeschwindigkeit mit zunehmender Zeilenanzahl und Tabellengröße beispielsweise beim Suchen einzelner Sätze tendenziell langsamer wird. Je nach betriebswirtschaftlicher Anforderung und voraussichtlicher Tabellengröße sollten Sie beim Anlegen der internen Tabelle auf den Typ achten; auf die einzelnen Tabellentypen wird im folgenden Abschnitt eingegangen.