Ansicht
Dokumentation

ABAPMODIFY_ITAB - MODIFY ITAB

ABAPMODIFY_ITAB - MODIFY ITAB

SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up   CPI1466 during Backup  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

MODIFY itab

Kurzreferenz



MODIFY ${ itab_line $| itab_lines $}.

Wirkung

Diese Anweisung ändert den Inhalt entweder einer Zeile itab_line oder mehrerer Zeilen itab_lines, die über einen Tabellenschlüssel oder einen Tabellenindex spezifiziert werden können.

Dabei gelten bezüglich der Modifikation von Schlüsselfeldern der primären und sekundären Tabellenschlüssel folgende Einschränkungen:

  • Die Schlüsselfelder des primären Tabellenschlüssels von sortierten Tabellen und Hash-Tabellen sind schreibgeschützt und dürfen nicht manipuliert werden, da ansonsten die interne Tabellenverwaltung invalidiert wird. Entsprechende Versuche führen in der Regel zu einer unbehandelbaren Ausnahme.

  • Die Schlüsselfelder eines sekundären Tabellenschlüssels sind dagegen nur dann schreibgeschützt, während der sekundäre Tabellenschlüssel verwendet wird. Dies ist innerhalb von LOOP-Schleifen und bei Verwendung der Anweisung MODIFY der Fall, bei denen der sekundäre Tabellenschlüssel hinter USING KEY angegeben ist. Ansonsten sind die Schlüsselfelder nicht schreibgeschützt.

Die Verwaltung von eindeutigen Sekundärschlüsseln wird nach einer Modifikation von Einzelzeilen beim nächsten Zugriff auf die internen Tabelle (delayed update) und von nicht-eindeutigen Sekundärschlüsseln bei der nächsten expliziten Verwendung des sekundären Tabellenschlüssels (lazy update) aktualisiert. Die Überprüfung der Eindeutigkeit eines Sekundärschlüssels findet erst zum Zeitpunkt der Aktualisierung statt. Eine interne Tabelle kann sich nach einer Modifikation einzelner Zeilen also in einem inkonsistenten Zustand bezüglich der Sekundärschlüssel befinden, der erst bei der nächsten Verwendung der Tabelle zu einer Ausnahme führt. Wenn die nächste Verwendung nicht unmittelbar nach der Modifikation erfolgt, können Sekundärschlüssel mit Methoden der Klasse CL_ABAP_ITAB_UTILITIES explizit aktualisiert werden, um eventuelle Ausnahmen an Ort und Stelle zu behandeln.

Die Verwaltung von eindeutigen Sekundärschlüsseln wird nach einer Modifikation mit MODIFY sofort aktualisiert und es führt zu einer unbehandelbaren Ausnahme, wenn es dadurch zu duplikativen Einträgen kommen würde. Die nicht-eindeutigen Sekundärschlüssel werden bei der nächsten expliziten Verwendung des sekundären Tabellenschlüssels aktualisiert ( lazy update).

Systemfelder

sy-subrc Bedeutung
0 Es wurde mindestens eine Zeile geändert.
4 Es wurde keine Zeile geändert, da beim Suchen über Tabellenschlüssel bzw. bei logischem Ausdruck keine passende Zeile gefunden wurde oder beim Suchen über einen Tabellenindex der angegebene Index größer als die aktuelle Anzahl von Zeilen war.

Das Systemfeld sy-tabix wird nicht gesetzt.

Hinweise

  • Außer über die Anweisung MODIFY kann der Inhalt einer einzelnen Tabellenzeile durch Zuweisungen an Feldsymbole und dereferenzierte Datenreferenzen, die auf die Tabellenzeile zeigen, geändert werden.

  • Es findet keine implizite Auswahl eines passenden Schlüssels oder Index statt. Der verwendete Tabellenschlüssel oder Tabellenindex ist immer eindeutig spezifiziert. Es kommt zu einer Warnung von der Syntaxprüfung, wenn es einen passenden sekundären Tabellenschlüssel gibt, dieser aber nicht verwendet wird. Diese Warnung sollte durch Verwendung des Schlüssels behoben werden. Sie kann in Ausnahmefällen aber auch durch ein Pragma umgangen werden.

Beispiel

Ändern einer Zeile einer internen Tabelle über einen Schlüsselzugriff. Es wird eine Zeile mit einem bestimmten Schlüsselwert in einen Arbeitsbereich wa ausgelesen und aus diesem hinter dem Zusatz FROM der Anweisung MODIFY eine Struktur mit einem anderen Wert in einer Nichtschlüsselkomponente konstruiert. Die Tabellenzeile mit dem entsprechenden Schlüsselwert wird modifiziert.

Ausnahmen

Behandelbare Ausnahmen

CX_SY_ITAB_DYN_LOOP

  • Ursache: Fehler in der dynamischen WHERE-Bedingung
    Laufzeitfehler: DYN_WHERE_PARSE_ERROR

Unbehandelbare Ausnahmen

  • Ursache: Unzulässige dynamische Angabe einer Zeilenkomponente
    Laufzeitfehler: ITAB_ILLEGAL_COMPONENT
  • Ein schreibgeschützter sekundärer Tabellenschlüssel würde überschrieben
    Laufzeitfehler: ITAB_ACTIVE_KEY_VIOLATION





Addresses (Business Address Services)   rdisp/max_wprun_time - Maximum work process run time  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 8410 Date: 20240523 Time: 141128     sap01-206 ( 126 ms )