Anfang des InhaltsbereichsInterne Tabellenobjekte Dokument im Navigationsbaum lokalisieren

Interne Tabellenobjekte sind als dynamische Datenobjekte immer Variablen. Wie alle Variablen werden interne Tabellenobjekte mit der Anweisung DATA deklariert. Daneben sind die syntaktisch gleichen Anweisungen STATICS für statische interne Tabellen in Prozeduren und CLASS-DATA für statische interne Tabellen in Klassen möglich. Wir beschränken uns hier auf die Anweisung DATA. Alle Angaben gelten entsprechend für STATICS und CLASS-DATA.

Bezug auf bekannte interne Tabellentypen

Wie bei der Deklaration aller Datenobjekte, können interne Tabellenobjekte durch den LIKE- bzw. TYPE-Zusatz der DATA-Anweisung deklariert werden.

DATA <itab> TYPE <type>|LIKE <obj> [WITH HEADER LINE].

Der LIKE-Zusatz verweist dabei auf ein bereits deklariertes Tabellenobjekt des gleichen Programms. Der TYPE-Zusatz kann auf einen mit TYPES deklarierten programmlokalen Tabellentyp oder auf einen Tabellentyp aus dem ABAP Dictionary verweisen.

Dabei ist zu beachten, daß zur Zeit nur Verweise auf vollständig spezifizierte Tabellentypen möglich sind. Ein TYPE-Verweis auf generische Tabellentypen, also Typen mit generischer Tabellenart (ANY TABLE, INDEX TABLE) oder unvollständiger Schlüsselangabe ist nicht möglich (Ausnahme: Besonderheiten bei Standard-Tabellen).

Der optionale Zusatz WITH HEADER LINE deklariert zusätzlich zur eigentlichen internen Tabelle ein gleichnamiges Datenobjekt, das den Zeilentyp der internen Tabelle übernimmt. Dieses Datenobjekt heißt Kopfzeile der internen Tabelle und kann bei Operationen auf internen Tabellen als Arbeitsbereich dienen (siehe Kopfzeilen als Arbeitsbereich). Bei Tabellen mit Kopfzeile muß die Namensgleichheit zwischen eigentlicher interner Tabelle, in diesem Zusammenhang auch Tabellenkörper genannt, und Kopfzeile besonders beachtet werden. Wenn bei Tabellen mit Kopfzeile der Tabellenkörper adressiert werden soll, muß dieser durch eckige Klammern hinter dem Namen (<itab>[]) kenntlich gemacht werden. Ansonsten interpretiert ABAP von einigen Ausnahmen abgesehen den Namen prinzipiell als Kopfzeile und nicht als die interne Tabelle selbst. Um Tabelle und Arbeitsbereich unterscheidbar zu machen, sollten deshalb interne Tabellen möglichst ohne Kopfzeilen angelegt werden. Insbesondere dürfen interne Tabellen bei der Schachtelung in Strukturen oder in andere interne Tabellen keine Kopfzeilen haben, da dies zu zweideutigen Ausdrücken führt.

Beispiel

TYPES vector TYPE SORTED TABLE OF i WITH UNIQUE KEY table_line.

DATA: itab TYPE vector,
      jtab LIKE itab WITH HEADER LINE.

* MOVE ITAB TO JTAB.   <-  Syntaxfehler!

MOVE itab TO jtab[].

Das Tabellenobjekt ITAB bezieht sich auf den vollständig spezifizierten Tabellentyp VECTOR. Das Tabellenobjekt JTAB hat den gleichen Datentyp wie ITAB. Zusätzlich wird zu JTAB eine Kopfzeile angelegt. In der ersten MOVE-Anweisung adressiert JTAB die Kopfzeile. Da diese den Datentyp I hat und der Tabellentyp von ITAB nicht in einen elementaren Typ konvertierbar ist, führt diese MOVE-Anweisung zum entsprechenden Syntaxfehler. Die zweite MOVE-Anweisung ist korrekt, da beide Operanden Tabellenobjekte sind.

Deklaration neuer interner Tabellen

Statt mit LIKE oder TYPE auf bekannte interne Tabellen zu verweisen, ist es auch möglich mit der DATA-Anweisung neue interne Tabellen zu konstruieren. Der konstruierte Tabellentyp besteht dann nicht eigenständig, sondern nur als Attribut des Tabellenobjekts. Man kann nicht mit dem TYPE- sondern nur mit dem LIKE-Zusatz auf ihn verweisen. Die Syntax für die Konstruktion eines Tabellenobjekts entspricht der Definition eines Tabellentyps mit der TYPES-Anweisung:

DATA <itab> TYPE|LIKE <tabkind> OF <linetype> WITH <key>
            [INITIAL SIZE <n>]
            [WITH HEADER LINE].

Wie bei der Definition eines Tabellentyps definiert der Typkonstruktor:

<tabkind> OF <linetype> WITH <key>

Tabellenart <tabkind>, Zeilentyp <linekind> und Schlüssel <key> der internen Tabelle <itab>. Da die technischen Eigenschaften von Datenobjekten immer vollständig bestimmt sind, muß die Tabelle in der DATA-Anweisung vollständig spezifiziert werden. Es können keine generischen Tabellenarten (ANY TABLE, INDEX TABLE) sondern nur voll spezifizierte Tabellenarten (STANDARD TABLE bzw. TABLE, SORTED TABLE, HASHED TABLE) angegeben werden. Der Schlüssel muß angegeben und die Eindeutigkeit muß spezifiziert werden (Ausnahme: Besonderheiten bei Standard-Tabellen).

Optional kann wie in der TYPES-Anweisung mit dem Zusatz INITIAL SIZE der initiale Hauptspeicherbedarf beeinflußt werden. Auch bei der Deklaration neuer interner Tabellen erlaubt der Zusatz WITH HEADER LINE das Anlegen einer Kopfzeile. Für die Kopfzeile gilt das gleiche wie beim Bezug auf bekannte interne Tabellentypen.

Beispiel

DATA itab TYPE HASHED TABLE OF spfli
          WITH UNIQUE KEY carrid connid.

Das Tabellenobjekt ITAB hat die Tabellenart Hash-Tabelle, einen Zeilentyp, welcher der flachen Struktur SPFLI aus dem ABAP Dictionary entspricht, und einen eindeutigen Schlüssel mit den Schlüsselfeldern CARRID und CONNID. Die Tabelle ITAB stellt sozusagen ein programmlokales Abbild der Datenbanktabelle SPFLI dar und ist damit bestens zur Bearbeitung von Daten aus dieser Datenbanktabelle geeignet, wenn die Zugriffe ausschließlich über den Schlüssel erfolgen sollen.

Ende des Inhaltsbereichs