Interne Tabellen sind ein Mittel, um dynamische Datenmengen im Arbeitsspeicher von ABAP abzuspeichern. Dabei werden die Daten zeilenweise im Speicher abgelegt, wobei jede Zeile die gleiche Struktur hat. Interne Tabellen bieten in ABAP die Funktionalität von Arrays und entlasten als dynamische Datenobjekte den Programmierer vom Aufwand der programmgesteuerten dynamischen Speicherverwaltung. Interne Tabellen werden immer dann verwendet, wenn Datenmengen einer festen Struktur programmintern verarbeitet werden. Ein wichtiges Einsatzgebiet ist z.B. die programminterne Speicherung und Aufbereitung von Inhalten aus Datenbanktabellen. Weiterhin sind interne Tabellen ein wichtiges Mittel um komplexe Datenstrukturen in einem ABAP-Programm zu implementieren.
Wie alle Elemente des ABAP-Typkonzepts liegen interne Tabellen in zwei Ausprägungen vor, nämlich als
Datentypen und als Datenobjekte. Ein Datentyp ist entweder die abstrakte Beschreibung einer internen Tabelle im Programm oder im ABAP Dictionary und dient zum Anlegen von konkreten Datenobjekten, oder das Attribut einer bereits als Datenobjekt vorliegenden internen Tabelle.Interne Tabellen als Datentypen
Interne Tabellen sind neben Strukturen einer der beiden aggregierten Datentypen in ABAP. Der Datentyp einer internen Tabelle wird vollständig spezifiziert durch Zeilentyp, Schlüssel und Tabellenart.
Zeilentyp
Der Zeilentyp einer internen Tabelle kann ein beliebiger Datentyp sein. Im Normalfall ist der Datentyp einer internen Tabelle eine Struktur. Die Komponenten der Struktur bilden dann die Spalten der internen Tabelle. Der Zeilentyp kann aber auch elementar oder selbst eine interne Tabelle sein.
Schlüssel
Der Schlüssel dient der Identifikation von Tabellenzeilen. Es gibt zwei mögliche Schlüssel für interne Tabellen, nämlich den Standardschlüssel und einen benutzerdefinierten Schlüssel. Der Schlüssel kann als eindeutig (UNIQUE) oder nicht eindeutig (NON-UNIQUE) festgelegt werden. Bei eindeutigen Schlüsseln gibt es keine mehrfachen Einträge in internen Tabellen. Die Eindeutigkeit richtet sich nach der Zugriffsart (siehe unten).
Bei Tabellen mit strukturiertem Zeilentyp ist der Standardschlüsssel aus allen zeichenartigen Spalten der internen Tabelle aufgebaut. Bei Tabellen mit elementaren Zeilentyp bildet die gesamte Zeile den Standardschlüssel. Bei Tabellen, deren Zeilentyp wieder ein interne Tabelle ist, ist der Standardschlüssel jedoch leer. Bei Tabellen mit unstrukturiertem Zeilentyp besteht der Standardschlüsssel aus der gesamten Zeile. Falls der Zeilentyp aber wieder eine Tabelle ist, wird ein leerer Schlüssel definiert.
Der benutzerdefinierte Schlüssel kann aus beliebigen Spalten der internen Tabelle aufgebaut werden, die selber keine interne Tabellen sind noch enthalten. Referenzen sind als Tabellenschlüssel zugelassen. Interne Tabellen mit benutzerdefiniertem Schlüssel werden auch als Key-Tabellen bezeichnet. Bei der Definition des Schlüssels ist die Reihenfolge der Schlüsselfelder signifikant. Dies ist wichtig, wenn beispielsweise nach den Schlüssel sortiert wird.
Tabellenart
Die Tabellenart definiert, wie ABAP auf einzelne Tabellenzeilen zugreift. Interne Tabellen können über die Tabellenart in drei Typen eingeteilt werden:
Bei Standard-Tabellen wird intern ein linearer Index gepflegt. Die internen Tabellenindizes werden ab einer bestimmten Größe als Baum verwaltet, wodurch Indexmanipulationskosten nicht linear, sondern nur logarithmisch mit der Zeilenzahl wachsen. Der Zugriff kann über den Tabellenindex oder den Schlüssel erfolgen. Beim Schlüsselzugriff hängt die Antwortzeit linear von der Anzahl der Tabelleneinträge ab. Der Schlüssel einer Standard-Tabelle ist immer nicht-eindeutig. Bei der Definition einer Standardtabelle kann kein eindeutiger Schlüssel definiert werden. Dadurch kann das zeilenweise Füllen einer Standard-Tabelle sehr schnell durchgeführt werden, da nicht bei jeder Zeile nach bereits vorhandenen Einträgen gesucht werden muß.
Sortierte Tabellen werden immer nach dem Schlüssel sortiert abgespeichert. Auch bei ihnen wird intern ein Index gepflegt. Der Zugriff kann über den Tabellenindex oder den Schlüssel erfolgen. Beim Schlüsselzugriff hängt die Antwortzeit logarithmisch von der Anzahl der Tabelleneinträge ab, da der Zugriff über eine binäre Suche erfolgt. Der Schlüssel von sortierten Tabellen kann eindeutig oder nicht-eindeutig sein. Bei der Tabellendefinition muß die Eindeutigkeit des Schlüssels als UNIQUE oder NON-UNIQUE festgelegt werden. Standard-Tabellen und sortierte Tabellen werden zusammenfassend auch als Index-Tabellen bezeichnet.
Bei Hash-Tabellen wird intern kein Index gepflegt. Der Zugriff auf Hash-Tabellen ist nur über Schlüsselangabe möglich. Dabei ist die Antwortzeit konstant und hängt nicht von der Anzahl der Tabelleneinträge ab, da der Zugriff über einen Hash-Algorithmus erfolgt. Der Schlüssel von Hash-Tabellen muß zur Zeit eindeutig sein. Bei der Tabellendefinition muß die Eindeutigkeit des Schlüssels als UNIQUE angegeben werden.
Generische interne Tabellen
Im Gegensatz zu anderen programmlokalen Datentypen muß der Datentyp einer internen Tabelle nicht vollständig zu spezifiziert werden sondern kann generisch aufgebaut sein. D.h. beim Anlegen eines Datentyps für eine interne Tabelle können entweder nur der Schlüssel oder der Zeilentyp und der Schlüssel unspezifiziert bleiben. Generische interne Tabellen können zur Zeit nur zur Typisierung von
Feldsymbolen und Schnittstellenparametern von Prozeduren verwendet werden, aber nicht bei der Deklaration von Datenobjekten.Interne Tabellen als dynamische Datenobjekte
Datenobjekte, die mit dem Datentyp einer internen Tabelle oder direkt als interne Tabelle deklariert werden, sind betreffs Zeilentyp, Schlüssel und Zugriffsart immer vollständig spezifiziert. Die Anzahl der Zeilen ist jedoch beliebig. Interne Tabellen sind somit dynamische Datenobjekte, die beliebig viele Zeilen eines festen Typs enthalten können. Die Anzahl der Zeilen einer internen Tabelle wird natürlich durch die Kapazitätsschranken konkreter Systeminstallationen beschränkt. Theoretisch erreichbar ist eine Speicherbelegung von 2 Gigabyte pro interner Tabelle inklusive interner Verwaltung. Realistisch sind z.Zt. Speicherbelegungen von bis zu 500 Megabyte. Bei Hash-Tabellen ist die maximale Zeilenzahl zusätzlich auf 2 Millionen Einträge festgelegt. Die Zeilentypen von internen Tabellen sind beliebige Datentypen und können somit elementar, strukturiert oder selbst interne Tabellen sein. Die einzelnen Zeilen einer internen Tabelle werden als Tabellenzeilen oder Tabelleneinträge bezeichnet. Die einzelnen Komponenten einer strukturierten Zeile bezeichnet man auch als Spalten der internen Tabelle.
Auswahl eines Tabellentyps
Welcher Tabellentyp (insbesondere welche Zugriffsart) im Einzelfall einzusetzen ist, richtet sich danach, wie die oben angegebenen typischen Operationen auf einzelnen Tabelleneinträgen am häufigsten auf der Tabelle angewendet werden.
Standard-Tabellen
Dieser Tabellentyp eignet sich immer dann, wenn die einzelnen Einträge über den Index angesprochen werden. Der Indexzugriff ist der schnellstmögliche Zugriff auf Tabelleneinträge. Das Füllen einer Standard-Tabelle sollte über das Anhängen von Zeilen (APPEND) und das Lesen, Modifizieren, Löschen mit einer Indexangabe (Option INDEX der entsprechenden ABAP-Befehle) erfolgen. Der Aufwand für Schlüsselzugriffe auf Standard-Tabellen steigt linear mit der Anzahl der Tabelleneinträge. Falls Schlüsselzugriffe notwendig sind, eignen sich Standard-Tabellen besonders dann, wenn das Füllen der Tabelle von der übrigen Verarbeitung entkoppelt werden kann. Beispielsweise kann eine Standard-Tabelle erst über Anhängen gefüllt und dann sortiert werden. Verwendet man danach Schlüsselzugriffe mit der Option für binäre Suche (BINARY), so hängt der Aufwand nur noch logarithmisch von der Anzahl der Tabelleneinträge ab.
Sortierte Tabellen
Dieser Tabellentyp eignet sich immer dann, wenn die Tabelle schon beim Aufbau sortiert vorliegen muß. Das Füllen der Tabelle erfolgt dann durch Einfügen (INSERT) gemäß der durch den Tabellenschlüssel definierten Sortierreihenfolge. Nichtpassende Tabelleneinträge werden dabei schon beim Aufbau erkannt. Bei Schlüsselzugriffen hängt der Aufwand logarithmisch von der Anzahl der Tabelleneinträge ab, da die binäre Suche automatisch durchgeführt wird. Sortierte Tabellen eignen sich insbesondere auch für teilsequentielle Verarbeitungen in einer LOOP-Schleife, wenn Anfangsstücke des Tabellenschlüssels in der WHERE-Bedingung angegeben werden.
Hash-Tabellen
Dieser Tabellentyp eignet sich immer dann, wenn Schlüsselzugriffe die zentrale Operation auf Tabelleneinträge darstellen. Bei Hash-Tabellen sind keine Indexzugriffe möglich. Dafür ist bei Schlüsselzugriffen der Aufwand pro Zugriff immer konstant und unabhängig von der Anzahl der Tabelleneinträge. Wie bei Datenbanktabellen ist der Schlüssel von Hash-Tabellen immer eindeutig. Hash-Tabellen eignen sich also für große Datenmengen und auch um datenbankähnliche interne Tabellen aufzubauen und entsprechend zu verwenden.
Interne Tabellen anlegen Interne Tabellen bearbeiten