Ansicht
Dokumentation

ABAPTYPES_SECONDARY_KEY - TYPES SECONDARY KEY

ABAPTYPES_SECONDARY_KEY - TYPES SECONDARY KEY

General Data in Customer Master   SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

TYPES, secondary_key

Kurzreferenz


... ${UNIQUE HASHED$}$|${UNIQUE SORTED$}$|${NON-UNIQUE SORTED$}
    KEY key_name $[ALIAS alias_name$] COMPONENTS comp1 comp2 ...

Zusatz:

... ALIAS alias_name

Wirkung

Definition eines sekundären Tabellenschlüssels eines internen Tabellentyps. Eine interne Tabelle kann bis zu 15 Sekundärschlüsseln haben.

Arten von Sekundärschlüsseln

Es gibt drei Arten von Sekundärschlüsseln, die durch die Art des Zugriffs und ihre Eindeutigkeit unterschieden werden:

  • Über UNIQUE HASHED definierte eindeutige sekundäre Hash-Schlüssel, bei denen die Verknüpfung mit Tabellenzeilen über einen Hash-Algorithmus erfolgt.
  • Über NON-UNIQUE SORTED definierte nicht-eindeutige sekundäre sortierte Schlüssel, bei denen die Verknüpfung mit Tabellenzeilen über einen sekundären Tabellenindex erfolgt, in dem die Schlüsselfelder aufsteigend sortiert sind.

Namen von Sekundärschlüsseln

Jeder Sekundärschlüssel hat einen eindeutigen Namen, über den er angesprochen werden kann. Der Name muss als key_name direkt angegeben werden und den Namenskonventionen folgen. Der angegebene Name darf nicht einer der vordefinierten Namen primary_key oder loop_key sein. Weiterhin müssen die Namen von Sekundärschlüsseln und ein eventueller Aliasname des Primärschlüssels eindeutig sein.

Schlüsselfelder

Die Schlüsselfelder des Sekundärschlüssels können auf folgende Arten definiert werden, wobei die Reihenfolge signifikant ist:

  • Aufzählung einzelner Komponenten comp1 comp2 ... des Zeilentyps hinter KEY. Voraussetzung ist, dass der Zeilentyp strukturiert ist und dass die Komponenten weder Tabellentypen sind noch Tabellentypen als Komponenten enthalten.
  • Falls die gesamte Tabellenzeile als Schlüssel definiert werden soll, kann als einzige Komponente comp die Pseudokomponente table_line hinter KEY angegeben werden. Dies ist für alle Zeilentypen möglich, die keine Tabellentypen sind oder als Komponenten enthalten.

Die Schlüsselfelder eines sekundären Tabellenschlüssels sind in einer Operation, die den Inhalt einzelner Zeilen einer internen Tabelle ändern, nur dann schreibgeschützt, wenn der Sekundärschlüssel während der Operation verwendet wird.

Sekundärschlüssel nutzbringend verwenden

Hinweise

  • Ein Sekundärschlüssel kann beim Zugriff auf interne Tabellen mit den Anweisungen READ TABLE itab, LOOP AT itab, MODIFY itab und DELETE itab sowie bei Lesezugriffen mit Tabellenausdrücken und in Mesh-Typen und Mesh-Pfaden verwendet werden, um die zu verarbeitenden Zeilen oder die Verarbeitungsreihenfolge zu bestimmen. Hierzu müssen die Zusätze WITH $[TABLE$] KEY ... COMPONENTS oder USING KEY angegeben werden. Ein Sekundärschlüssel wird nie implizit verwendet.
  • Bei der Anweisung INSERT itab wird die Einfügeposition ausschließlich über Primärschlüssel und Primärindex bestimmt. Ein Sekundärschlüssel kann nur für die Quelltabelle angegeben werden, aus der mehrere Zeilen übernommen werden. Letzteres gilt auch für die Anweisung APPEND.
  • Ein Sekundärschlüssel ist nie generisch. Bei der Definition müssen alle Schlüsselfelder und die Eindeutigkeit vollständig spezifiziert werden. Ein interner Tabellentyp kann aber bezüglich der Anzahl seiner Sekundärschlüssel generisch sein.
  • Die Angabe DEFAULT KEY ist bei Sekundärschlüsseln nicht möglich.
  • Als Schlüsselfelder können insbesondere auch strukturierte Komponenten angegeben werden, solange sie den sonstigen Voraussetzungen genügen. Bei der Auswertung eines strukturierten Schlüsselfelds gelten die Regeln für Strukturvergleiche.
  • Wenn verschiedene Tabellenschlüssel einer internen Tabelle die gleichen Komponenten enthalten, kommt es zu einer Warnung von der Syntaxprüfung, die durch ein Pragma ausgeblendet werden kann.
  • Die Namen von Sekundärschlüsseln sind abgesehen von obigen Einschränkungen zwar frei wählbar, es sollte aber darauf geachtet werden, keine Komponentennamen der internen Tabelle zu verwenden. Der Name loop_key ist für die explizite Angabe des verwendeten Schlüssels bei der Schleifenverarbeitung mit LOOP vorgesehen.
  • Schlüsselfelder können auch Referenztypen haben. Dies wird aber insbesondere für sortierte Schlüssel nicht empfohlen, da eine Sortierung von Referenzvariablen fragwürdig ist. Für nicht-initiale ungültige Referenzen ist überhaupt keine Reihenfolge definiert. Es kommt zu einem Laufzeitfehler, wenn eine solche Referenz im Rahmen eines Schlüsselzugriffs verglichen werden muss.
  • Die interne Verwaltung von Sekundärschlüsseln einer internen Tabelle kann bezüglich des Speicherverbrauchs und notwendiger Aktualisierungen aufwendig werden. Aus diesem Grund sollten Sekundärschlüssel sparsam und genau in solchen Fällen eingesetzt werden, bei denen ihr Nutzen die Kosten übersteigt. Siehe z.B. das ausführbare Beispiel Zeilen über Schlüssel löschen.

Beispiel

Definition eines Tabellentyps mit einem Primärschlüssel und zwei Sekundärschlüsseln hash_key und sort_key. Bei einer Standardtabelle darf der Primärschlüssel nicht eindeutig sein. Der Sekundärschlüssel hash_key hat die gleichen Komponenten wie der Primärschlüssel und muss als Hash-Schlüssel eindeutig sein. Der sortierte Schlüssel sort_key könnte auch eindeutig definiert werden, was im gezeigten Beispiel aber nicht sinnvoll ist, da eine Kundenkennung mehrfach in der Buchungstabelle enthalten sein kann. Die beiden gezeigten Syntaxformen unterscheiden sich in der Angabe des Namens primary_key für den Primärschlüssel, haben aber die gleiche Bedeutung.

Syntaxform ohne Angabe des Namens primary_key:

Syntaxform mit Angabe des Namens primary_key:

Beispiel

Das Programm DEMO_SECONDARY_KEYS demonstriert die Deklaration und Verwendung eines sekundären Tabellenschlüssels und den daraus resultierenden Performance-Gewinn.

Zusatz

... ALIAS alias_name

Wirkung

Ein Aliasname alias_name kann für jeden Sekundärschlüssel einer internen Tabelle definiert werden. Der Aliasname liegt im Namensraum der Sekundärschlüssel, muss den Namenskonventionen folgen und eindeutig sein. Der angegebene Name darf nicht einer der vordefinierten Namen primary_key oder loop_key sein. Er erlaubt es, den Sekundärschlüssel über einen zusätzlichen selbstdefinierten Namen anzusprechen.

Ein Aliasname gehört zu den technischen Typeigenschaften eines Tabellentyps. Zwei Tabellentypen mit unterschiedlichen Aliasnamen aber sonst identischen technischen Eigenschaften sind nicht kompatibel.

Hinweise

  • Ein Sekundärschlüssel mit Aliasnamen kann sowohl über den Aliasnamen alias_name als auch über seinen Namen key_name adressiert werden.
  • Ein Aliasname kann beim Ändern der Sekundärschlüssel eines vorhandenen Tabellentyps verwendet werden, um eine Invalidierung der vorhandenen Benutzer zu vermeiden.

Beispiel

Definition eines Sekundärschlüssels carrname mit Aliasnamen carriername. Beide Namen können im USING KEY-Zusatz einer LOOP-Anweisung verwendet werden.








ROGBILLS - Synchronize billing plans   TXBHW - Original Tax Base Amount in Local Currency  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 12167 Date: 20240523 Time: 131911     sap01-206 ( 260 ms )