Show TOC Anfang des Inhaltsbereichs

Tabellenzeilen einfügen  Dokument im Navigationsbaum lokalisieren

Die Open SQL-Anweisung zum Einfügen von Zeilen in Datenbanktabellen ist:

INSERT INTO target lines.

Diese Anweisung ermöglicht es, einzelne oder mehrere Zeilen lines in eine Datenbanktabelle target einzufügen. Die Datenbanktabelle target kann statisch und dynamisch angegeben werden.

Datenbanktabelle angeben

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

INSERT INTO dbtab [CLIENT SPECIFIED] lines.

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

Um die Datenbanktabelle dynamisch anzugeben, schreibt man target:

INSERT INTO (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

Um eine einzelne Zeile in eine Datenbanktabelle einzufügen, schreibt man für lines:

INSERT INTO target VALUES wa.

Der Inhalt des Arbeitsbereichs wa wird in die Datenbanktabelle dbtab geschrieben. Es empfiehlt sich den Arbeitsbereich mit Bezug auf die Struktur der Datenbanktabelle zu deklarieren.

Einzelne Zeilen können auch über folgende Kurzformen der INSERT-Anweisung eingefügt werden:

INSERT target FROM wa.

Bei der Ersetzung des Ausdrucks VALUE durch FROM kann der Ausdruck INTO weggelassen werden. Noch kürzer ist:

INSERT dbtab.

In diesem Fall wird implizit der Inhalt des Tabellenarbeitsbereich dbtab in die gleichnamige Datenbanktabelle geschrieben. Der Tabellenarbeitsbereich muss 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

Um mehrere Zeilen in eine Datenbanktabelle einzufügen, schreibt man für lines:

INSERT target FROM TABLE itab [ACCEPTING DUPLICATE KEYS].

Alle Zeilen der internen Tabelle itab werden auf einmal in die Datenbanktabelle eingefügt. Falls eine der Zeilen nicht eingefügt werden kann, da schon eine Zeile mit dem gleichen Primärschlüssel in der Datenbanktabelle existiert, kommt es zu einem Laufzeitfehler. Der Laufzeitfehler kann mit dem Zusatz ACCEPTING DUPLICATE KEYS verhindert werden.

Wenn mehrere Zeilen eingefügt werden sollen, ist das Arbeiten mit internen Tabellen performanter als das zeilenweise Einfügen einzelner Zeilen.

Beispiele

Beispiel

Einzelne Zeilen.

TABLES spfli.

DATA wa TYPE spfli.

wa-carrid = 'LH'.
wa-cityfrom = '
WASHINGTON'.
...
INSERT INTO spfli VALUES wa.

wa-carrid = 'UA'.
wa-cityfrom = '
LONDON'.
...
INSERT spfli FROM wa.

spfli-carrid = 'LH'.
spfli-cityfrom = '
BERLIN'.
...
INSERT spfli.

Es werden einzelne Zeilen über die drei hierfür möglichen Varianten der INSERT-Anweisung in die Datenbanktabelle SPFLI eingefügt.

Statt

INSERT spfli

in der letzten Zeile, könnte man z.B. auch die längeren Formen

INSERT spfli FROM spfli

oder

INSERT INTO spfli VALUES spfli

schreiben. Der Name SPFLI ist also doppeldeutig.

Diese Varianten der Anweisung INSERT funktionieren nur mit einem durch TABLES deklarierten Tabellenarbeitsbereich und sollten daher nicht mehr verwendet werden.

Beispiel

DATA: itab TYPE HASHED TABLE OF spfli
                WITH UNIQUE KEY carrid connid,
      wa LIKE LINE OF itab.

wa-carrid = 'UA'. wa-connid = '0011'. wa-cityfrom = ...
INSERT wa INTO TABLE itab.

wa-carrid = 'LH'. wa-connid = '1245'. wa-cityfrom = ...
INSERT wa INTO TABLE itab.

wa-carrid = 'AA'. wa-connid = '4574'. wa-cityfrom = ...
INSERT wa INTO TABLE itab.

...

INSERT spfli FROM TABLE itab ACCEPTING DUPLICATE KEYS.

IF sy-subrc = 0.
  ...
ELSEIF sy-subrc = 4.
  ...
ENDIF.

Es wird eine Hash-Tabelle itab gefüllt und auf einmal in die Datenbanktabelle SPFLI geschrieben. Der Erfolg der Operation wird anhand sy-subrc geprüft.

 

Ende des Inhaltsbereichs