Ansicht
Dokumentation
ABAPINSERT_DBTAB - INSERT DBTAB
CL_GUI_FRONTEND_SERVICES - Frontend Services Fill RESBD Structure from EBP Component StructureDiese Dokumentation steht unter dem Copyright der SAP AG.
INSERT dbtab
INSERT ${ INTO target $[
connection$] VALUES wa $}
$| ${
target $[
connection$] FROM wa $}
$| ${
target $[
connection$] FROM TABLE itab $}
$| ${
target $[
connection$] FROM
( SELECT subquery_clauses $[UNION$|INTERSECT$|EXCEPT ...$] ) $}
$[MAPPING FROM ENTITY$].
Varianten:
1. INSERT INTO target VALUES wa.
2. INSERT target FROM wa.
3. INSERT target FROM TABLE itab.
4. INSERT target FROM ( SELECT subquery_clauses $[UNION$|INTERSECT$|EXCEPT ...$] ).
5. ... MAPPING FROM ENTITY.
Wirkung
Die -Anweisung INSERT fügt eine oder mehrere Zeilen in die in target angegebene DDIC-Datenbanktabelle oder DDIC-Tabellen-View ein. Die einzufügenden Zeilen werden einem Arbeitsbereich wa, einer internen Tabelle itab oder der Ergebnismenge einer eingebetteten Subquery SELECT subquery_clauses entnommen. Mit dem Zusatz connection kann eine Sekundärverbindung angegeben werden.
Bei der Verwendung von VALUES muss zwischen INSERT und target
ein INTO und bei der Verwendung von FROM darf kein INTO angegeben werden.
Systemfelder
Die Anweisung INSERT setzt die Werte der Systemfelder sy-subrc
(siehe unten) und sy-dbcnt. sy-dbcnt wird auf die Anzahl der eingefügten Zeilen
gesetzt. Wenn dabei ein Überlauf eintritt, weil die Anzahl der Zeilen größer als 2.147.483.647 ist, wird sy-dbcnt auf -1 gesetzt. Wenn beim Einfügen einer
LOB-Handle-Struktur mit einer Komponente für
Schreibströme
sy-subrc 2 ist, wird sy-dbcnt ebenfalls auf den Wert -1 (für undefiniert) gesetzt.
Hinweise
- Die eingefügten Zeilen werden beim nächsten Datenbank-Commit endgültig in die Datenbanktabelle übernommen. Bis dahin können sie durch einen Datenbank-Rollback wieder entfernt werden. Die aktuelle Isolationsebene legt fest, ob die eingefügten Daten bereits vor oder nur nach dem Datenbank-Commit in anderen Datenbank-LUWs gelesen werden können.
- Die Anweisung INSERT setzt bis zum nächsten Datenbank-Commit bzw. -Rollback eine Datenbanksperre in Form einer Schreibsperre, wodurch es bei falscher Verwendung zu einem Deadlock kommen kann.
- Die Anzahl von Zeilen, die innerhalb einer Datenbank-LUW in den Tabellen einer Datenbank eingefügt werden kann ist datenbankspezifisch dadurch beschränkt, dass ein Datenbanksystem nur eine begrenzte Menge von Daten im Rollback-Bereich und von Sperren verwalten kann.
- Nach dem Einfügen von Zeilen in eine globale temporäre Tabelle muss diese vor dem nächsten impliziten Datenbank-Commit explizit durch die -Anweisung DELETE FROM ohne WHERE oder einen expliziten Datenbank-Commit bzw. Datenbank-Rollback wieder geleert werden, sonst kommt es zum Laufzeitfehler COMMIT_GTT_ERROR.
- Die Anweisung INSERT darf nicht auf die Systemtabelle TRDIR angewendet werden.
Variante 1
INSERT INTO target VALUES wa.
Variante 2
INSERT target FROM wa.
Wirkung
Diese beiden Varianten fügen eine einzelne in einem Arbeitsbereich wa
enthaltene Zeile ein. Beide Varianten verhalten sich völlig identisch und unterscheiden sich nur in der Syntax.
Systemfelder
Diese Varianten der Anweisung INSERT setzen den Wert des Systemfelds sy-subrc wie folgt:
sy-subrc | Bedeutung |
0 | Die im Arbeitsbereich in wa angegebene Zeile wurde eingefügt. |
2 | Bei Angabe einer LOB-Handle-Struktur mit einer Komponente für Schreibströme wurden die nicht-LOB-Handle-Komponenten noch nicht in die Datenbank geschrieben, sondern werden spätestens beim Schließen des Stroms übermittelt. Das Auftreten dieses Zustands hängt vom Datenbanksystem ab. Siehe LOB-Handles. |
4 | Die im Arbeitsbereich in wa angegebene Zeile wurde nicht eingefügt, da bereits eine Zeile mit dem gleichen Primärschlüssel bzw. einem eindeutigen Sekundärindex in der DDIC-Datenbanktabelle vorhanden ist. |
Beispiel
Einfügen zweier einzelner Zeilen in eine DDIC-Datenbanktabelle.
Statt eines expliziten Arbeitsbereichs kann auch ein
Hostausdruck
mit dem Wertoperator VALUE verwendet werden.
Variante 3
INSERT target FROM TABLE itab.
Wirkung
Diese Variante fügt die in einer internen Tabelle itab enthaltenen Zeilen ein.
Hinweis
Es gibt keine syntaktische Variante mit VALUES für interne Tabellen.
Systemfelder
Diese Variante der Anweisung INSERT kann Ausnahmen auslösen,
wenn versucht wird, Zeilen der internen Tabelle einzufügen, für die es in der DDIC-Datenbanktabelle
bereits Zeilen mit dem gleichen Schlüssel gibt. Wenn keine Ausnahme auftritt, wir der Wert des Systemfelds sy-subrc wie folgt gesetzt:
sy-subrc | Bedeutung |
0 | Alle Zeilen der internen Tabelle itab wurden eingefügt oder die interne Tabelle ist leer. |
4 | Der Zusatz ACCEPTING DUPLICATE KEYS ist angegeben und es wurden nicht alle Zeilen der internen Tabelle eingefügt, da bereits eine Zeile mit dem gleichen Primärschlüssel bzw. einem eindeutigen Sekundärindex in der DDIC-Datenbanktabelle vorhanden ist. |
Mehr zu Ausnahmen beim Einfügen von Zeilen interner Tabellen findet sich unter TABLE itab.
Beispiel
Einfügen zweier einzelner Zeilen in eine DDIC-Datenbanktabelle.
Statt einer expliziten internen Tabelle kann auch ein
Hostausdruck
mit dem Wertoperator VALUE verwendet werden.
Variante 4
INSERT target FROM ( SELECT subquery_clauses $[UNION$|INTERSECT$|EXCEPT ...$] ).
Wirkung
Diese Variante fügt die Zeilen der Ergebnismenge einer eingebetteten
Subquery SELECT
subquery_clauses ein, wobei mehrere Ergebnismengen mit UNION,
INTERSECT oder EXCEPT vereinigt werden können.
Systemfelder
Diese Variante der Anweisung INSERT setzt den Wert des Systemfelds sy-subrc wie folgt:
sy-subrc | Bedeutung |
0 | Es wurden alle Zeilen der Ergebnismenge der eingebetteten Subquery eingefügt. |
4 | Die Ergebnismenge der eingebetteten Subquery ist leer und es wurden keine Zeilen eingefügt. |
Hinweise
- Die Anweisung INSERT mit Subquery kann nicht verwendet werden, wenn für die zu füllende Tabelle die Protokollierung eingeschaltet ist.
- Wenn beim Einfügen der Ergebnismenge der eingebetteten Subquery eine Zeile nicht eingefügt werden kann, da es bereits eine Zeile mit dem gleichen Primärschlüssel bzw. einem gleichen eindeutigen Sekundärindex gibt, kommt es bei dieser Variante immer zu einer abfangbaren Ausnahme der Klasse CX_SY_OPEN_SQL_DB und das Systemfeld sy-subrc wird nicht gesetzt.
Beispiel
Einfügen aller Zeilen der DDIC-Datenbanktabelle DEMO_JOIN1 in die Tabelle DEMO_JOIN3.
Variante 5
... MAPPING FROM ENTITY.
Wirkung
Mit dem Zusatz MAPPING FROM ENTITY werden mit abgeleiteten BDEF-Typen typisierte Strukturen und interne Tabellen behandelt. Weitere Information ist im Thema ABAP-SQL-Anweisungen mit MAPPING FROM ENTITY enthalten.
ABAP Short Reference TXBHW - Original Tax Base Amount in Local Currency
Diese Dokumentation steht unter dem Copyright der SAP AG.
Length: 15125 Date: 20240426 Time: 201147 sap01-206 ( 181 ms )