
Interne Tabellen sind dynamische Datenobjekte mit einer beliebigen Anzahl von Zeilen eines gemeinsamen Zeilentyps. Interne Tabellen eignen sich besonders für die Bearbeitung von Massendaten in betriebswirtschaftlichen Anwendungen. Neben der Angabe des Zeilentyps wird der Datentyp einer internen Tabelle durch die Angabe einer Tabellenart und eines Tabellenschlüssels bestimmt.
Zeilentyp
Als Zeilentyp kann ein nicht-generischer Datentyp aus dem ABAP Dictionary oder einer globalen Klasse bzw. einem globalen Interface, ein nicht-generischer programmlokaler Typ oder ein eingebauter ABAP-Typ angegeben werden. Alle Typen, d.h. elementare Typen, strukturierte Typen, Tabellentypen und Referenztypen sind als Zeilentyp möglich.
Tabellenart
Die Tabellenart legt fest, wie auf einzelne Zeilen zugegriffen werden kann:
Standardtabellen werden über einen Zeilenindex verwaltet. Neue Zeilen können entweder an das Ende der Tabelle angehängt oder an bestimmten Positionen eingefügt werden. Der Zugriff auf einzelne Zeilen erfolgt über den Tabellenschlüssel oder den Zeilenindex.
Sortierte Tabellen werden ebenfalls über einen Zeilenindex verwaltet, liegen aber stets aufsteigend nach dem Tabellenschlüssel sortiert vor. Neue Zeilen können nur sortiert eingefügt oder angehängt werden. Der Zugriff erfolgt wie bei Standardtabellen.
Hash-Tabellen werden über einen Hash-Algorithmus verwaltet. Der Zugriff erfolgt ausschließlich über den Tabellenschlüssel. Indexoperationen sind nicht möglich.
Neben den oben beschriebenen Tabellenarten STANDARD TABLE, SORTED TABLE und HASHED TABLE gibt es zwei generische Tabellenarten zur Verwendung bei der Typisierung von Formalparametern und Feldsymbolen. Die generische Tabellenart ANY TABLE umfasst alle Tabellenarten, die Tabellenart INDEX TABLE nur solche, auf denen Indexoperationen möglich sind (also Standardtabellen und sortierte Tabellen).
Tabellenschlüssel
Interne Tabellen haben einen primären Tabellenschlüssel und können sekundäre Tabellenschlüssel haben. Der Tabellenschlüssel kann bei strukturierten Zeilentypen aus einer Liste von Strukturkomponenten bestehen. Durch die Pseudokomponente table_line kann alternativ die gesamte Tabellenzeile als Schlüssel spezifiziert werden. Eine weitere Möglichkeit ist die Angabe des Standardschlüssels DEFAULT KEY. Er enthält alle Komponenten, die weder numerisch noch selbst Tabellentypen sind. Der primäre Tabellenschlüssel einer Standardtabelle kann uahc leer sein. Der Tabellenschlüssel bei Standardtabellen ist stets mehrdeutig, das heißt, es kann mehrere Zeilen in der Tabelle mit identischem Schlüssel geben. Im Gegensatz hierzu haben Hash-Tabellen stets einen eindeutigen Schlüssel. Bei sortierten Tabellen läßt sich diese Eigenschaft über die Zusätze UNIQUE und NON-UNIQUE bei der Schlüsselangabe steuern.
Bearbeitung interner Tabellen
Anweisungen zur Bearbeitung interner Tabellen sind beispielsweise READ TABLE, LOOP AT, INSERT INTO TABLE, MODIFY TABLE, DELETE TABLE.
Beispiel
Deklaration einer internen Tabelle itab mit strukturiertem Zeilentyp. Füllen der Tabelle durch Einfügen von Zeilen, sequentielles Auslesen der Zeilen in einer Schleife und Zuweisung der fünften Zeile an ein inline deklariertes Feldsymbol.
DATA: BEGIN OF struc,
col1 TYPE i,
col2 TYPE i,
END OF struc,
itab LIKE STANDARD TABLE OF struc.
DO 10 TIMES.
struc-col1 = sy-index.
struc-col2 = sy-index ** 2.
INSERT struc INTO TABLE itab.
ENDDO.
LOOP AT itab INTO struc.
WRITE: / struc-col1, struc-col2.
ENDLOOP.
READ TABLE itab INDEX 5 ASSIGNING FIELD-SYMBOL(<line>).
WRITE: / <line>-col1, <line>-col2.