Interne Tabellen (ABAP): Unterschied zwischen den Versionen

Aus MattWiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
Interne Tabellen sind Tabellen, die im Hauptspeicher gehalten werden. Im Gegensatz dazu werden Datenbanktabellen im Datenbanksystem abgelegt.
Interne Tabellen sind Tabellen, die im Hauptspeicher gehalten werden. Im Gegensatz dazu werden Datenbanktabellen im Datenbanksystem abgelegt.


Der für die interne Tabelle benötigte Tabellentyp kann im Dictionary oder im ABAP Code definiert werden.
Beispiel für implizite Definition:<syntaxhighlight lang="abap">
DATA: gt_buchregal TYPE TABLE OF gst_buch
</syntaxhighlight>Beispiele für explizite Definition:<syntaxhighlight lang="abap">
" Struktur für Buch
TYPES: BEGIN OF gst_buch,
        buch_titel type string,
        anz_seiten type int4,
      END OF gst_buch.
" Tabellentyp für Standard-Tabelle
TYPES: gtt_buchregal TYPE STANDARD TABLE OF gst_buch
      WITH NON-UNIQUE DEFAULT KEY.
DATA: gt_buchregal TYPE gtt_buchregal
</syntaxhighlight>Dabei könnte die Struktur <code>gst_buch</code>und der Tabellentyp <code>gtt_buchregal</code> auch im Dictionary definiert werden.
== Tabellentyp ==
Interne Tabellen benötigen einen Tabellentyp. Ein Tabellentyp kann per Code oder im Dictionary definiert werden. Er definiert:
Interne Tabellen benötigen einen Tabellentyp. Ein Tabellentyp kann per Code oder im Dictionary definiert werden. Er definiert:
* '''Tabellenart:''' z. B. STANDARD
* '''Tabellenart:''' z. B. STANDARD
Zeile 6: Zeile 25:
* '''Schlüsseldefinition:''' z. B. WITH NON_UNIQUE DEFAULT KEY
* '''Schlüsseldefinition:''' z. B. WITH NON_UNIQUE DEFAULT KEY


== Tabellenarten ==
=== Tabellenarten ===
{| class="wikitable"
{| class="wikitable"
!Typ
!Typ
! colspan="3" |Any
! colspan="3" |ANY*
|-
|-
|'''Generisch'''
|'''Generisch'''
| colspan="2" |'''Index Table'''
| colspan="2" |'''INDEX TABLE*'''
|'''Hashed Table'''
|'''Hashed Table'''
|-
|-
Zeile 34: Zeile 53:
|UNIQUE oder NON-UNIQUE
|UNIQUE oder NON-UNIQUE
|UNIQUE
|UNIQUE
|}
|-
|'''Bemerkung'''
|Kann und muss im
Schlüssel keine eindeutigen


== Definition einer internen Tabelle ==
Werte enthalten.
Der für die interne Tabelle benötigte Tabellentyp kann im Dictionary oder im ABAP Code definiert werden.Beispiele für Definition in ABAP:
|Kann und muss im  
Schlüssel eindeutige


Beispiel für implizite Definition:<syntaxhighlight lang="abap">
Werte enthalten.
DATA: gt_buchregal TYPE TABLE OF gst_buch
|Schlüssel muss
</syntaxhighlight>Beispiele für explizite Definition:<syntaxhighlight lang="abap">
eindeutige Werte
" Struktur für Buch
|}
TYPES: BEGIN OF gst_buch,
<nowiki>*</nowiki>) ANY und INDEX TABLE können als Typisierung für Schnittstellen von Methode, Funktionsbausteinen etc. verwendet werden.
        buch_titel type string,
        anz_seiten type int4,
      END OF gst_buch.
 
" Tabellentyp für Standard-Tabelle
TYPES: gtt_buchregal TYPE STANDARD TABLE OF gst_buch
      WITH NON-UNIQUE DEFAULT KEY.


Beispiel für explizite Definition:<syntaxhighlight lang="abap">
" Tabellentyp für sortierte Tabelle
" Tabellentyp für sortierte Tabelle
TYPES: gtt_buchregal_sortiert TYPE SORTED TABLE OF gst_buch
TYPES: gtt_buchregal_sortiert TYPE SORTED TABLE OF gst_buch
Zeile 59: Zeile 76:
TYPES: gtt_buchregal_hashed TYPE HASHED TABLE OF gst_buch
TYPES: gtt_buchregal_hashed TYPE HASHED TABLE OF gst_buch
       WITH UNIQUE DEFAULT KEY.
       WITH UNIQUE DEFAULT KEY.
</syntaxhighlight>
=== Schlüsseldefinition ===
Der Standardschlüssel <code>DEFAULT KEY</code> umfasst alle nicht numerischen Felder des Strukturtyps.
Beispiel für explizite Definition:<syntaxhighlight lang="abap">
" Tabellentyp für sortierte Tabelle mit Schlüsselfeld anz_seiten
TYPES: gtt_buchregal_sortiert TYPE SORTED TABLE OF gst_buch
      WITH NON-UNIQUE KEY anz_seiten.
</syntaxhighlight>Wichtig sind folgende Einschänkungen zur Schlüsseleindeutigkeit:
{| class="wikitable"
!Tabellenart
!Schlüsseleindeutigkeit
!Beschreibung
|-
|STANDARD
|NON-UNIQUE
|Kann mehrere Einträge mit identischen Schlüsselwerten enthalten
|-
|SORTED
|UNIQUE und NON-UNIQUE
|Eindeutigkeit der Schlüsselwerte ist optional
|-
|HASHED
|UNIQUE
|Einträge müssen eindeutige Schlüsselwerte tragen
|}
== Kopfzeilen ==
'''Früher:''' Interne Tabellen wurden mit Kopfzeilen angelegt (Stichwort ABAP-Anweisung OCCURS).
Das heißt, die Kopfzeile ist die Arbeitsstruktur in die die Daten der Tabelle geschrieben werden.
Diese Arbeitsstruktur ist namensgleich mit dem Tabellenkorpus. Damit war eine verkürzte Notation möglich:<syntaxhighlight lang="abap">
" Verkürzte Notation
LOOP AT <itab>


DATA: gt_buchregal TYPE gtt_buchregal
" Lange Notation
</syntaxhighlight>Dabei könnte die Struktur <code>gst_buch</code>und der Tabellentyp <code>gtt_buchregal</code> auch im Dictionary definiert werden.
LOOP AT <itab> INTO <ws>
</syntaxhighlight>'''Empfehlung heute:''' Interne Tabellen ohne Kopfzeilen anlegen. Damit ist der Weg für optimierten Zugriff auf die Tabelleninhalte frei.


[[Kategorie:SAP]]
[[Kategorie:SAP]]
[[Kategorie:ABAP]]
[[Kategorie:ABAP]]

Version vom 28. August 2016, 22:55 Uhr

Interne Tabellen sind Tabellen, die im Hauptspeicher gehalten werden. Im Gegensatz dazu werden Datenbanktabellen im Datenbanksystem abgelegt.

Der für die interne Tabelle benötigte Tabellentyp kann im Dictionary oder im ABAP Code definiert werden.

Beispiel für implizite Definition:

DATA: gt_buchregal TYPE TABLE OF gst_buch

Beispiele für explizite Definition:

" Struktur für Buch
TYPES: BEGIN OF gst_buch,
         buch_titel type string,
         anz_seiten type int4,
       END OF gst_buch.

" Tabellentyp für Standard-Tabelle
TYPES: gtt_buchregal TYPE STANDARD TABLE OF gst_buch
       WITH NON-UNIQUE DEFAULT KEY.

DATA: gt_buchregal TYPE gtt_buchregal

Dabei könnte die Struktur gst_buchund der Tabellentyp gtt_buchregal auch im Dictionary definiert werden.

Tabellentyp

Interne Tabellen benötigen einen Tabellentyp. Ein Tabellentyp kann per Code oder im Dictionary definiert werden. Er definiert:

  • Tabellenart: z. B. STANDARD
  • Zeilentyp
  • Schlüsseldefinition: z. B. WITH NON_UNIQUE DEFAULT KEY

Tabellenarten

Typ ANY*
Generisch INDEX TABLE* Hashed Table
Tabellenart STANDARD TABLE SORTED TABLE HASHED TABLE
Indexzugriff Ja Ja Nein
Schlüsselzugriff Ja Ja Ja
Schlüsseleindeutigkeit NON-UNIQUE UNIQUE oder NON-UNIQUE UNIQUE
Bemerkung Kann und muss im

Schlüssel keine eindeutigen

Werte enthalten.

Kann und muss im

Schlüssel eindeutige

Werte enthalten.

Schlüssel muss

eindeutige Werte

*) ANY und INDEX TABLE können als Typisierung für Schnittstellen von Methode, Funktionsbausteinen etc. verwendet werden.

Beispiel für explizite Definition:

" Tabellentyp für sortierte Tabelle
TYPES: gtt_buchregal_sortiert TYPE SORTED TABLE OF gst_buch
       WITH NON-UNIQUE DEFAULT KEY.

" Tabellentyp für hashed Tabelle
TYPES: gtt_buchregal_hashed TYPE HASHED TABLE OF gst_buch
       WITH UNIQUE DEFAULT KEY.

Schlüsseldefinition

Der Standardschlüssel DEFAULT KEY umfasst alle nicht numerischen Felder des Strukturtyps.

Beispiel für explizite Definition:

" Tabellentyp für sortierte Tabelle mit Schlüsselfeld anz_seiten
TYPES: gtt_buchregal_sortiert TYPE SORTED TABLE OF gst_buch
       WITH NON-UNIQUE KEY anz_seiten.

Wichtig sind folgende Einschänkungen zur Schlüsseleindeutigkeit:

Tabellenart Schlüsseleindeutigkeit Beschreibung
STANDARD NON-UNIQUE Kann mehrere Einträge mit identischen Schlüsselwerten enthalten
SORTED UNIQUE und NON-UNIQUE Eindeutigkeit der Schlüsselwerte ist optional
HASHED UNIQUE Einträge müssen eindeutige Schlüsselwerte tragen

Kopfzeilen

Früher: Interne Tabellen wurden mit Kopfzeilen angelegt (Stichwort ABAP-Anweisung OCCURS).

Das heißt, die Kopfzeile ist die Arbeitsstruktur in die die Daten der Tabelle geschrieben werden.

Diese Arbeitsstruktur ist namensgleich mit dem Tabellenkorpus. Damit war eine verkürzte Notation möglich:

" Verkürzte Notation
LOOP AT <itab>

" Lange Notation
LOOP AT <itab> INTO <ws>

Empfehlung heute: Interne Tabellen ohne Kopfzeilen anlegen. Damit ist der Weg für optimierten Zugriff auf die Tabelleninhalte frei.