Ansicht
Dokumentation
ABAPMODIFY_ITAB - MODIFY ITAB
SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up CPI1466 during BackupDiese Dokumentation steht unter dem Copyright der SAP AG.
MODIFY itab
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.
- Mit einer speziellen Variante MODIFY mesh_path können Zeilen des letzten Pfadknotens eines
Mesh-Pfads geändert 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
- 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
- Ursache:
Verletzung des Speicherbereichs beim Zugriff auf einen TABLES-Parameter
Laufzeitfehler: ITAB_STRUC_ACCESS_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 )