Show TOC Anfang des Inhaltsbereichs

Interne Tabellen  Dokument im Navigationsbaum lokalisieren

Interne Tabellen sind als dynamische Datenobjekte immer Variablen. Wie alle Variablen werden interne Tabellen mit der Anweisung DATA deklariert. Daneben sind die syntaktisch gleichen Anweisungen STATICS für statische interne Tabellen in Prozeduren und CLASS-DATAfü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 Tabellentypen

Wie bei der Deklaration aller Datenobjekte, können interne Tabellen 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, dass 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).

 

Achtung Der Zusatz WITH HEADER LINE ist obsolet und sollte nicht mehr verwendet werden. Konsultieren Sie bitte die Schlüsselwortdokumentation.

 

Der optionale Zusatz WITH HEADER LINEdeklariert 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 muss 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, muss 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 selbstdefinierte Tabellentypen beschrieben, definiert der Typkonstruktor:

tabkind OF linetype WITH key

Tabellenart tabkind, Zeilentyp linetype und Schlüssel key der internen Tabelle itab. Da die technischen Eigenschaften von Datenobjekten immer vollständig bestimmt sind, muss 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 muss angegeben und die Eindeutigkeit muss spezifiziert werden (Ausnahme: Besonderheiten bei Standard-Tabellen).

Optional kann wie in der TYPES-Anweisung mit dem Zusatz INITIAL SIZE der initiale Hauptspeicherbedarf beeinflusst 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 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