Interne Tabellen (ABAP): Unterschied zwischen den Versionen
Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 20: | Zeile 20: | ||
</syntaxhighlight>Dabei könnte die Struktur <code>gst_buch</code>und der Tabellentyp <code>gtt_buchregal</code> auch im Dictionary definiert werden. | </syntaxhighlight>Dabei könnte die Struktur <code>gst_buch</code>und der Tabellentyp <code>gtt_buchregal</code> auch im Dictionary definiert werden. | ||
Eine Struktur kann auch auf Basis | Eine Struktur kann auch auf Basis einer internen Tabelle erstellt werden:<syntaxhighlight lang="abap"> | ||
" | " Definition einer internen Tabelle auf Basis eines Tabellentyps | ||
DATA: gs_biblio LIKE LINE OF | " una anschließende Erstellung einer passenden Struktur | ||
DATA: gt_biblio TYPE gtt_biblio. | |||
gs_biblio LIKE LINE OF gt_biblio. | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Zeile 112: | Zeile 114: | ||
== Lesen von Daten == | == Lesen von Daten == | ||
=== Gesamte interne Tabelle lesen === | |||
'''Früher:''' Interne Tabellen wurden mit Kopfzeilen angelegt (Stichwort ABAP-Anweisung OCCURS). | '''Früher:''' Interne Tabellen wurden mit Kopfzeilen angelegt (Stichwort ABAP-Anweisung OCCURS). | ||
Zeile 118: | Zeile 122: | ||
Diese Arbeitsstruktur ist namensgleich mit dem Tabellenkorpus. Damit war eine verkürzte Notation möglich:<syntaxhighlight lang="abap"> | Diese Arbeitsstruktur ist namensgleich mit dem Tabellenkorpus. Damit war eine verkürzte Notation möglich:<syntaxhighlight lang="abap"> | ||
" Verkürzte Notation | " Verkürzte Notation | ||
LOOP AT <itab> | LOOP AT <itab>. | ||
" Code | |||
ENDLOOP. | |||
</syntaxhighlight>'''Empfehlung heute:''' Interne Tabellen ohne Kopfzeilen anlegen. Damit ist der Weg für optimierten Zugriff auf die Tabelleninhalte frei.<syntaxhighlight lang="abap"> | </syntaxhighlight>'''Empfehlung heute:''' Interne Tabellen ohne Kopfzeilen anlegen. Damit ist der Weg für optimierten Zugriff auf die Tabelleninhalte frei.<syntaxhighlight lang="abap"> | ||
" Lange Notation | " Lange Notation | ||
LOOP AT <itab> INTO < | LOOP AT <itab> INTO <wa>. | ||
" Code | |||
ENDLOOP. | |||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Einzelne Datensätze lesen === | |||
== Einfügen / Schreiben von Daten == | == Einfügen / Schreiben von Daten == | ||
Datensätze können in interne Tabellen mit '''INSERT''' oder '''APPEND''' geschrieben werden.<syntaxhighlight lang="abap"> | Datensätze können in interne Tabellen mit '''INSERT''' oder '''APPEND''' geschrieben werden.<syntaxhighlight lang="abap"> | ||
" Anhängen von Daten am Ende der internen Tabelle | " Anhängen von Daten am Ende der internen Tabelle | ||
APPEND < | APPEND <wa> TO <itab> | ||
</syntaxhighlight>Bei SORTED- oder HASHED-Tabellen kann auch INSERT verwendet werden:<syntaxhighlight lang="abap"> | </syntaxhighlight>Bei SORTED- oder HASHED-Tabellen kann auch INSERT verwendet werden:<syntaxhighlight lang="abap"> | ||
INSERT < | INSERT <wa> INTO TABLE <itab> | ||
</syntaxhighlight>Abhängig von Tabellenart passiert jedoch etwas anderes: | </syntaxhighlight>Abhängig von Tabellenart passiert jedoch etwas anderes: | ||
{| class="wikitable" | {| class="wikitable" |
Version vom 3. September 2016, 09:50 Uhr
Interne Tabellen sind Tabellen, die im Hauptspeicher gehalten werden. Im Gegensatz dazu werden Datenbanktabellen im Datenbanksystem abgelegt.
Anlegen von Strukturen und Tabellentypen
Der für die interne Tabelle benötigte Tabellentyp kann global im Dictionary oder lokal 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_buch
und der Tabellentyp gtt_buchregal
auch im Dictionary definiert werden.
Eine Struktur kann auch auf Basis einer internen Tabelle erstellt werden:
" Definition einer internen Tabelle auf Basis eines Tabellentyps
" una anschließende Erstellung einer passenden Struktur
DATA: gt_biblio TYPE gtt_biblio.
gs_biblio LIKE LINE OF gt_biblio.
Aufbau von Tabellentypen
Interne Tabellen benötigen einen Tabellentyp. Ein Tabellentyp kann per Code oder im Dictionary definiert werden. Er definiert:
- Zeilentyp, z. B. ein Strukturtyp
- Tabellenart, z. B. STANDARD
- 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 |
Lesen von Daten
Gesamte interne Tabelle lesen
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>.
" Code
ENDLOOP.
Empfehlung heute: Interne Tabellen ohne Kopfzeilen anlegen. Damit ist der Weg für optimierten Zugriff auf die Tabelleninhalte frei.
" Lange Notation
LOOP AT <itab> INTO <wa>.
" Code
ENDLOOP.
Einzelne Datensätze lesen
Einfügen / Schreiben von Daten
Datensätze können in interne Tabellen mit INSERT oder APPEND geschrieben werden.
" Anhängen von Daten am Ende der internen Tabelle
APPEND <wa> TO <itab>
Bei SORTED- oder HASHED-Tabellen kann auch INSERT verwendet werden:
INSERT <wa> INTO TABLE <itab>
Abhängig von Tabellenart passiert jedoch etwas anderes:
Tabellenart | Erläuterung |
---|---|
STANDARD | Datensatz wird angehängt |
SORTED | Datensatz wird laut Schlüsselfeldern sortiert eingefügt |
HASHED | Datensatz wird laut schlüssel eingefügt, jedoch nicht sortiert |
Sortieren
Interne Tabellen können sortiert werden:
SORT <itab> BY <spalte> [ASCENDING|DESCENDING]
Dies passiert auf dem Applikationsserver.
Leeren von internen Tabellen
CLEAR initialisiert interne Tabellen ohne den Speicher frei zu geben:
" Leeren der Tabelle und der Arbeitsstruktur
CLEAR lt_itab.
CLEAR ls_itab.
" Optional in einem Kettensatz
CLEAR: lt_itab, ls_itab.
FREE gibt den von der Tabelle beanspruchten Speicher frei:
FREE: lt_itab, ls_itab.
Wenn die Tabelle nach einem FREE erneut angesprochen wird, wird der Speicher wieder reserviert, was Performance kostet.