Besonderheiten bei Standard-Tabellen 

Während es sortierte Tabellen, Hash-Tabellen und Schlüsselangaben zu Tabellen erst seit Release 4.0 gibt, gab es Standard-Tabellen auch schon vor diesem Release. Weiterhin ist die Definition eines beliebigen Zeilentyps, die Definition von Tabellentypen und die Deklaration von Tabellen ohne Kopfzeile erst seit Release 3.0 möglich. Dies bedingt einige Besonderheiten beim Anlegen von Standardtabellen, die aus Kompatibilitätsgründen erhalten bleiben.

Standard-Tabellen vor Release 3.0

Vor Release 3.0 gab es nur interne Tabellenobjekte mit Kopfzeile, deren Zeilentyp eine flache Struktur ist. Es gab keine selbständigen Tabellentypen. Ein solches Tabellenobjekt wurde ausschließlich dadurch angelegt, daß der OCCURS-Zusatz wie folgt bei der Deklaration einer flachen Struktur zugefügt wird:

DATA: BEGIN OF <itab> OCCURS <n>,
      ...
        <fi>...,
      ...
      END OF <itab>.

Die Anweisungskette deklariert eine interne Tabelle <itab>, deren Zeilentyp der flachen Struktur entspricht, die ohne den OCCURS-Zusatz erzeugt würde. Weiterhin wird dabei immer eine Kopfzeile für die interne Tabelle angelegt.

Die Zahl <n> im OCCURS-Zusatz hat die gleiche Bedeutung, wie im Zusatz INITIAL SIZE ab Release 4.0. Dabei wirkt die Angabe der Zahl 0 wie das Weglassen des Zusatzes INITIAL SIZE. Der initiale Hauptspeicherbedarf der internen Tabelle wird dann vom System bestimmt.

Obige Anweisung ist auch zu Release 4.0 noch möglich und hat in etwa die gleiche Funktionalität wie folgende Anweisungen:

TYPES: BEGIN OF <itab>,
       ...
         <fi>...,
       ...
       END OF <itab>.

DATA <itab> TYPE STANDARD TABLE OF <itab>
                 WITH NON-UNIQUE DEFAULT KEY
                 INITIAL SIZE <n>
                 WITH HEADER LINE.

Bei der ursprünglichen Anweisung wird jedoch kein selbständiger Datentyp <itab> angelegt, sondern der Zeilentyp existiert nur als Attribut des Datenobjekts <itab>.

Standard-Tabellen seit Release 3.0

Seit Release 3.0 können Tabellentypen mit

TYPES <t> TYPE|LIKE <linetype> OCCURS <n>.

und Tabellenobjekte mit

DATA <itab> TYPE|LIKE <linetype> OCCURS <n> [WITH HEADER LINE].

angelegt werden. Der Zusatz OCCURS bewirkt, daß aus dem Datentyp <linetype> eine Standard-Tabelle dieses Zeilentyps konstruiert wird. Der Zeilentyp kann ein beliebiger Datentyp sein. Die Zahl <n> im OCCURS-Zusatz hat die gleiche Bedeutung, wie vor Release 3.0. Interne Tabellen vor Release 4.0 hatten als Schlüssel immer den Standardschlüssel, d.h. alle nichtnumerischen Felder, die weder interne Tabellen sind noch enthalten.

Obige Anweisungen sind auch zu Release 4.0 möglich und haben genau die gleiche Funktionalität wie

TYPES|DATA <itab> TYPE|LIKE STANDARD TABLE OF <linetype>
                            WITH NON-UNIQUE DEFAULT KEY
                            INITIAL SIZE <n>
                            [WITH HEADER LINE].

Sie können also auch durch diese Anweisungen ersetzt werden.

Standard-Tabellen seit Release 4.0

Beim Anlegen von Standard-Tabellen sind folgende Formen der Anweisungen TYPES und DATA möglich. Die zusätzliche Angabe INITIAL SIZE ist bei allen Anweisungen möglich. Die zusätzliche Angabe WITH HEADER LINE ist bei den DATA-Anweisungen möglich.

Standard-Tabellentypen

Generischer Standard-Tabellentyp:

TYPES <itab> TYPE|LIKE [STANDARD] TABLE OF <linetype>.

Der Tabellenschlüssel ist nicht definiert.

Vollständig spezifizierter Standard-Tabellentyp:

TYPES <itab> TYPE|LIKE [STANDARD] TABLE OF <linetype>
                       WITH [NON-UNIQUE] <key>.

Der Schlüssel einer vollständig spezifizierten Standardtabelle ist immer nicht eindeutig.

Standard-Tabellenobjekte

Kurzformen der DATA-Anweisung

DATA <itab> TYPE|LIKE [STANDARD] TABLE OF <linetype>.

DATA <itab> TYPE|LIKE [STANDARD] TABLE OF <linetype>
                      WITH DEFAULT KEY.

Diese beiden DATA-Anweisungen werden vom System automatisch zur folgenden Anweisung vervollständigt:

DATA <itab> TYPE|LIKE STANDARD TABLE OF <linetype>
                      WITH NON-UNIQUE DEFAULT KEY.

Die beiden Kurzformen der DATA-Anweisung sollen dazu dienen, die Deklaration von Standard-Tabellen, die kompatibel zu den internen Tabellen vor Release 4.0 sind, möglichst einfach zu halten. Wenn in einer DATA-Anweisung Bezug auf obigen generischen Standard-Tabellentyp genommen wird, wird ebenfalls automatisch der Standardschlüssel als Tabellenschlüssel verwendet.

Vollständig spezifizierte Standard-Tabelle:

DATA <itab> TYPE|LIKE [STANDARD] TABLE OF <linetype>
                       WITH [NON-UNIQUE] <key>.

Der Schlüssel einer Standardtabelle ist immer nicht eindeutig.