12.2 Aufbau und Arten von internen Tabellen 

Die Daten in internen Tabellen sind im Tabellenrumpf abgelegt. Handelt es sich um Tabellen mit Kopfzeilen, besitzen sie zusätzlich einen Kopf. Anderenfalls müssen Sie selbst eine Workarea deklarieren und einen Datensatz aus der Tabelle dort hinein übertragen, um ihn bearbeiten zu können. Der Tabellenrumpf besteht aus beliebig vielen identisch strukturierten Zeilen.
Der Typ einer Zeile ist ein ABAP-Datentyp, eine Struktur oder eine interne Tabelle. Besteht beispielsweise im einfachen Fall eine Zeile aus einer flachen Struktur von Feldern, entsprechen die Felder den Spalten der internen Tabelle. Es kann aber auch eine tiefe Struktur als Zeilentyp einer internen Tabelle dienen. Bei einer tiefen Struktur sind die Komponenten (die »Felder«) in sich strukturiert und können wiederum mehrere Felder oder sogar interne Tabellen enthalten.
Ein weiterer wesentlicher Unterschied zu Datenbanktabellen ist das Arbeiten mit Schlüsseln. Zwar dient ein Schlüssel wie bei einer Datenbanktabelle der Identifizierung einer Zeile, es gibt bei internen Tabellen jedoch eindeutige und nicht eindeutige Schlüssel. Ferner unterscheidet man zwischen Standardschlüssel und benutzerdefiniertem Schlüssel:
-
Bei einem eindeutigen Schlüssel kann analog zu einer Datenbanktabelle eine Zeile nicht mehrfach vorkommen, sondern nur einmal.
-
Bei einem nicht eindeutigen Schlüssel darf eine Zeile in einer internen Tabelle auch mehrfach vorkommen.
-
Der Standardschlüssel ist vom Zeilentyp der Tabelle abhängig.
-
Bleibt man bei der einfachen Annahme, dass die Zeile aus einer Struktur mit Feldern besteht, ist der Standardschlüssel aus allen Feldern der Struktur zusammengesetzt. In diesem Fall wäre ein benutzerdefinierter Schlüssel aus einer beliebigen, frei definierbaren Teilmenge von Feldern der Struktur zusammengesetzt.
Interne Tabellen lassen sich, je nach Zugriffsart, unterschiedlichen Tabellentypen zuordnen:
-
Standardtabellen
Der Zugriff kann bei Standardtabellen über einen Schlüssel oder über einen Index erfolgen. Beim Zugriff über einen Schlüssel korrelieren Zugriffszeit und Anzahl der Zeilen linear – je mehr Zeilen, desto länger dauert es bis zur Antwort. Bei großen internen Tabellen bietet sich deshalb der Zugriff über einen intern gepflegten Index an. Die Zugriffszeit wächst hierbei nicht linear, sondern nur logarithmisch.Bei einer Standardtabelle kann kein eindeutiger Schlüssel definiert werden. Mehrfach vorkommende identische Zeilen sind folglich möglich. Dafür können Standardtabellen sehr schnell gefüllt werden, weil die Prüfung auf eine Doppelung vorhandener Schlüssel hin entfällt. Beispielsweise könnte die Tabelle zuerst gefüllt und dann entsprechend dem Verwendungszweck sortiert werden. Je nach Zugriffsgestaltung würde dann der Suchaufwand auch nur logarithmisch wachsen.
Aufgrund der unkomplizierten Handhabung sind in der Praxis die Standardtabellen nach wie vor der am häufigsten vorkommende Tabellentyp. Bei den folgenden Beispielen in diesem Kapitel werden Sie mit Standardtabellen und Schlüsselzugriff arbeiten.
-
Sortierte Tabellen
Bei sortierten Tabellen wird immer nach einem Schlüssel sortiert abgelegt. Im Gegensatz zu den Standardtabellen kann der Schlüssel bei sortierten Tabellen eindeutig sein. Der Zugriff erfolgt über den Schlüssel oder ebenfalls über einen Index. Bereits beim Zugriff über einen Schlüssel steigt die Zugriffszeit – aber nur logarithmisch – mit der Anzahl von Zeilen an.Sortierte Tabellen werden bevorzugt vor den Standardtabellen verwendet, wenn bereits beim Füllen der internen Tabelle die Zeilen sortiert vorliegen sollen. Doppelungen von Zeilen werden bereits in diesem Stadium erkannt. Je nach Inhalt des Returncodes der ABAP-Anweisung und der Gestaltung der Fehlerbehandlung im Quellcode wird ein Laufzeitfehler ausgelöst oder in eine Fehlerbehandlung verzweigt.
Da sowohl sortierte Tabellen als auch Standardtabellen über einen internen Index verfügen, werden sie auch als Indextabellen bezeichnet.
-
Hash-Tabellen
Bei Hash-Tabellen wird weder über einen Index zugegriffen noch ein linearer Index mitgeführt; der Zugriff erfolgt ausschließlich über einen eindeutigen Schlüssel. Dieser Tabellentyp empfiehlt sich für große Tabellen. Durch einen speziellen Algorithmus, den Hash-Algorithmus, ist die Antwortzeit konstant, gleichgültig, wie viele Zeilen die Tabelle hat. Für große Tabellen ist die Hash-Tabelle der schnellste der drei internen Tabellentypen. Bei sehr kleinen Tabellen wäre es hingegen denkbar, dass mit einem anderen Tabellentyp unter bestimmten Umständen sogar kürzere Zugriffszeiten möglich sind.Hinter einem Hash-Algorithmus steckt vereinfacht ausgedrückt letztendlich eine Funktion für ein Prüfsummenverfahren, das einen Datensatz möglichst eindeutig gekennzeichnet und gekürzt darstellt; der deutsche Ausdruck hierfür lautet Streuwertfunktion. Es gibt verschiedene Hash-Algorithmen, auf die hier allerdings nicht weiter eingegangen werden soll. Hash-Algorithmen werden auch bei digitalen Signaturen und in der Kryptologie verwendet.
Sortierte Tabellen, Hash-Tabellen und Schlüssel für interne Tabellen gibt es seit ABAP-Release 4.0. Durch diese Tabellenarten und das Typkonzept entstanden neue Möglichkeiten für die Tabellendeklarationen und die Tabellenverarbeitung – und Sie werden aus diesem Grund in der Praxis auch verschiedene Syntaxformen für gleichartige Aufgabenstellungen und Funktionalitäten finden. Dies gilt ebenso für Standardtabellen: Es gibt verschiedene Schreibweisen für gleichbedeutende Anweisungen: traditionelle und moderne.
[+] Moderne Schreibweisen bevorzugen
Auch wenn wir in diesem Kapitel neben den aktuellen Schreibweisen auch die obsoleten Varianten vermitteln, sollten Sie die moderneren Schreibweisen bevorzugen. Die obsoleten Schreibweisen können nicht alle Tabellentypen verarbeiten und führen im Kontext von ABAP Objects zu Syntaxfehlern. Einerseits werden obsolete Sprachkonstrukte in der ABAP-Umgebung zwar aus Kompatibilitätsgründen über viele Jahre hinweg noch unterstützt. Andererseits durchdringt ABAP Objects nach und nach alle Anwendungen des SAP-Systems immer stärker, und die Nischen, in denen noch nicht objektorientiertes ABAP sinnvoll genutzt werden kann, werden schnell weniger und kleiner.
Auch gegenwärtige und zukünftige Entwicklungen von SAP finden mit ABAP Objects statt, sodass es sich auch aus diesem Grund empfiehlt, gleich mit der Anwendung der modernen Syntax zu beginnen und sich mit den obsoleten Varianten nur deshalb noch auseinanderzusetzen, weil sie Ihnen immer wieder in altem Code begegnen werden. Daher wird in den folgenden Beispielen zunächst die Aufgabenstellung in der modernen Schreibweise gelöst und anschließend die traditionelle Schreibweise dargestellt.