Tabellenzeilen einfügen oder ändern Dokument im Navigationsbaum lokalisieren

Um Zeilen in eine Datenbanktabelle einzufügen, unabhängig davon ob ihr Primärschlüssel schon darin vorhanden ist oder nicht, verwendet man die Open SQL-Anweisung:

MODIFY <target> <lines>.

Falls noch keine Zeile mit dem gleichen Primärschlüssel wie die einzufügende Zeile in der Datenbanktabelle vorkommt, dann arbeitet MODIFY wie INSERT, d.h. die Zeile wird eingefügt.

Falls schon eine Zeile mit dem gleichen Primärschlüssel wie die einzufügende Zeile in der Datenbanktabelle vorkommt, dann arbeitet MODIFY wie UPDATE, d.h. die Zeile wird geändert.

Aus Gründen der Performance, sollten MODIFY nur dann verwendet werden, wenn im Programm wirklich nicht zwischen diesen beiden Fällen unterschieden werden kann.

Es können, einzelne oder mehrere Zeilen <lines> in eine Datenbanktabelle <target> eingefügt bzw. geändert werden. In einen View aus dem ABAP Dictionary können nur dann Zeilen eingefügt bzw. geändert werden, wenn sich der View auf eine einzige Tabelle bezieht und der Pflegestatus des Views im Dictionary ohne Einschränkung ist. Die Datenbanktabelle <target> kann statisch und dynamisch angegeben werden.

Datenbanktabelle angeben

Um die Datenbanktabelle statisch anzugeben, schreibt man für <target>:

MODIFY <dbtab> [CLIENT SPECIFIED] <lines>.

Dabei ist <dbtab> der Name einer im ABAP-Dictionary bekannten Datenbanktabelle.

Um die Datenbanktabelle dynamisch anzugeben, schreibt man <target>:

MODIFY (<name>) [CLIENT SPECIFIED] <lines>.

Dabei enthält das Feld <name> den Namen einer im ABAP-Dictionary bekannten Datenbanktabelle.

Mit dem Zusatz CLIENT SPECIFIED kann die automatische Mandantenbehandlung abgeschaltet werden.

Einzelne Zeilen einfügen bzw. ändern

Um eine einzelne Zeile in eine Datenbanktabelle einzufügen bzw. zu ändern, schreibt man für <lines>:

MODIFY <target> FROM <wa> .

Der Inhalt des Arbeitsbereichs <wa> wird in die Datenbanktabelle <dbtab> geschrieben. Der Arbeitsbereich <wa> muß ein Datenobjekt sein, das mindestens die gleiche Länge und die gleiche Ausrichtung wie die Zeilen der Datenbanktabelle hat. Die Daten werden entsprechend der Struktur der Tabellenzeile und unabhängig von der Struktur des Arbeitsbereichs in die Datenbanktabelle gestellt. Es empfiehlt sich den Arbeitsbereich mit Bezug auf die Struktur der Datenbanktabelle zu deklarieren.

Falls die Datenbanktabelle noch keine Zeile mit dem gleichen Primärschlüssel wie im Arbeitsbereich angegeben enthält, wird eine neue Zeile eingefügt. Falls die Datenbanktabelle schon eine Zeile mit dem gleichen Primärschlüssel wie im Arbeitsbereich angegeben enthält, wird diese Zeile überschrieben. Falls die Zeile nicht verarbeitet werden konnte, da beispielsweise schon eine Zeile mit gleichem eindeutigen Sekundärindex auf der Datenbank existiert, wird SY-SUBRC wird auf 4 ansonsten auf 0 gesetzt.

Ein Kurzform obiger Anweisung ist:

MODIFY <dbtab>.

In diesem Fall wird implizit der Inhalt des Tabellenarbeitsbereich <dbtab> in die gleichnamige Datenbanktabelle geschrieben. Der Tabellenarbeitsbereich muß mit der Anweisung TABLES deklariert werden. Die dynamische Angabe der Datenbanktabelle ist dann nicht möglich. Die vor Release 4.0 notwendige Deklaration des Tabellenarbeitsbereichs sollte heute nicht mehr verwendet werden, um Doppeldeutigkeiten zu vermeiden.

Mehrere Zeilen einfügen bzw. ändern

Um mehrere Zeilen in eine Datenbanktabelle einzufügen bzw. zu ändern, schreibt man für <lines>:

MODIFY <target> FROM TABLE <itab> .

Die Zeilen der internen Tabelle <itab>, deren Primärschlüssel noch nicht in der Datenbanktabelle vorhanden ist, werden eingefügt. Die Zeilen der internen Tabelle <itab>, deren Primärschlüssel schon in der Datenbanktabelle vorhanden ist, überschreiben die entsprechenden Zeilen. Für den Zeilentyp von <itab> gilt das gleiche wie oben für den Arbeitsbereich <wa>.

Falls mindestens eine Zeile nicht verarbeitet werden konnte, da beispielsweise schon eine Zeile mit gleichem eindeutigen Sekundärindex auf der Datenbank existiert, wird SY-SUBRC wird auf 4 ansonsten auf 0 gesetzt. SY-DBCNT wird auf die Anzahl der geänderten Zeilen gesetzt.

Ende des Inhaltsbereichs