Ansicht
Dokumentation

ABENITAB_EMPTY_KEY - ITAB EMPTY KEY

ABENITAB_EMPTY_KEY - ITAB EMPTY KEY

ABAP Short Reference   ROGBILLS - Synchronize billing plans  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- Leerer Tabellenschlüssel

Der primäre Tabellenschlüssel einer Standardtabelle kann leer sein. Ein leerer Tabellenschlüssel enthält keine Schlüsselfelder.

Hinweis

Sortierte Schlüssel und Hash-Schlüssel egal ob primär oder sekundär sind nie leer.

Deklaration

Ein leerer primärer Tabellenschlüssel kann wie folgt erzeugt werden:

  • implizit bei Verwendung des Standardschlüssels wenn ein strukturierter Zeilentyp keine nicht-numerischen elementaren Komponenten enthält bzw. wenn ein unstrukturierter Zeilentyp tabellenartig ist

Hinweise zur Verwendung

Unkritische Verwendungen

Ein leerer primärer Tabellenschlüssel kann dazu verwendet werden, um eine Tabelle wie einen Array zu behandeln. Das heißt, das Befüllen und sonstige Zugriffe erfolgen so, dass dafür keine durch Schlüsselwerte bedingte Ordnung zugrunde gelegt wird. Ein leerer interner Tabellenschlüssel kann dazu in allen Anweisungen verwendet werden, in denen seine implizite oder explizite Angabe die Reihenfolge bestimmt in der auf die interne Tabelle zugegriffen wird.

Hinweise

  • Es sollte einem Entwickler immer bewusst sein, wann er mit einem leeren primären Tabellenschlüssel umgeht. Dies wird eigentlich erst durch eine explizite Deklaration des leeren Schlüssels erreicht. Die implizite Deklaration über den Standardschlüssel, bei der es vom Zeilentyp abhängt, ob der primäre Tabellenschlüssel leer ist oder nicht, ist in der Regel nicht geeignet.
  • Auch bei einem leeren primären Schlüssel gibt es in einer Standardtabelle natürlich immer die durch den Primärindex vorgegebene Ordnung, die in diesbezüglichen Indexzugriffen oder einer Schleifenverarbeitung ausgenutzt werden kann.

Beispiel

Ein prominentes Beispiel ist die Anweisung LOOP AT itab, bei der die implizite oder explizite Verwendung (über USING primary_key) die Verarbeitungsreihenfolge bezüglich des primären Tabellenindex festlegt, ansonsten aber keinen Einfluss hat.

Kritische Verwendungen

In den folgenden Anweisungen, in denen mit dem primären Tabellenschlüssel gearbeitet wird, ohne dass die Schlüsselfelder explizit angegeben werden, ist die Angabe eines leeren primären Tabellenschlüssels kritisch und es kommt in der Regel zu unerwartetem Verhalten. Ein statisch erkennbarer leerer Tabellenschlüssel führt zu einer Warnung von der Syntaxprüfung.

  • Angabe des primären Tabellenschlüssels über einen Arbeitsbereich:
  • Wenn ein leerer Tabellenschlüssel über FROM wa der Anweisung READ TABLE angegeben ist, wird die erste Zeile der internen Tabelle gelesen.

  • Wenn ein leerer Tabellenschlüssel über FROM wa der Anweisung MODIFY angegeben ist, wird die erste Zeile der internen Tabelle modifiziert.

  • Wenn ein leerer Tabellenschlüssel über FROM wa der Anweisung DELETE angegeben ist, wird die erste Zeile der internen Tabelle gelöscht.

  • Wenn bei Ausführung der Anweisung SORT itab ohne Angabe des Zusatzes BY ein leerer primärer Tabellenschlüssel vorliegt, hat die Anweisung keine Wirkung, d.h., es findet keine Sortierung statt.
  • Wenn bei der Anweisung DELETE ADJACENT DUPLICATES ein leerer primärer Tabellenschlüssel vorliegt, werden keine Zeilen gelöscht.
  • Bei der Anweisung COLLECT wird bei einem leeren primären Tabellenschlüssel immer die erste Zeile der internen Tabelle verdichtet. In diesem Fall müssen alle Komponenten des Zeilentyps numerisch sein.

Hinweis

Insbesondere bei der impliziten Deklaration eines leeren internen Tabellenschlüssels über den Standardschlüssel, der selbst wieder implizit deklariert sein kann, können obige Anweisungen für Überraschungen sorgen.

Beispiel

Beispiel

Typische Verwendung einer Tabelle mit leerem Tabellenschlüssel, in der sich die Reihenfolge der Zeilen nicht durch eine Sortierung ändern soll. Eine Anweisung SORT source. hätte keine Wirkung.






BAL_S_LOG - Application Log: Log header data   rdisp/max_wprun_time - Maximum work process run time  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 7055 Date: 20240523 Time: 161712     sap01-206 ( 103 ms )