## INSERT-Anweisung (insert_statement)

Die INSERT-Anweisung (insert_statement) erzeugt neue Zeilen einer Tabelle.

### Syntax

<insert_statement> ::=
INSERT [INTO] <table_name> [(<column_name>,...)]
VALUES (<insert_expression>,...) [<duplicates_clause>] [IGNORE TRIGGER] [NOWAIT]
| INSERT [INTO] <table_name> [(<column_name>,...)] <query_expression>
[<duplicates_clause>] [IGNORE TRIGGER] [NOWAIT]
| INSERT [INTO] <table_name> SET <set_insert_clause>,...
[<duplicates_clause>] [IGNORE TRIGGER] [NOWAIT]

<insert_expression> ::= <extended_expression> | <subquery>
<extended_expression> ::= <expression> | DEFAULT | STAMP

<set_insert_clause> ::= <column_name> = <extended_value_spec>

### Beispiele

SQL-Tutorial, Einfügen, Ändern, Löschen von Zeilen

### Erläuterung

Der Tabellenname muss eine existierende Basistabelle oder View-Tabelle oder ein Synonym bezeichnen.

Der Benutzer muss das INSERT-Privileg für die durch den Tabellennamen identifizierte Tabelle besitzen. Wenn durch den Tabellennamen eine View-Tabelle identifiziert wird, ist es möglich, dass selbst der Eigentümer der View-Tabelle das INSERT-Privileg nicht besitzt, weil die View-Tabelle nicht änderbar ist.

#### <column_name>, <set_insert_clause>

Wenn Spaltennamen column_name oder eine SET INSERT-Klausel set_insert_clause angegeben sind, müssen alle angegebenen Spaltennamen Spalten der angegebenen Tabelle sein. Wenn die Tabelle ohne Schlüssel definiert wurde (d.h. vom Datenbanksystem wird intern die Spalte SYSKEY erzeugt), darf die Spalte SYSKEY nicht in der Folge der genannten Spalten oder in einer SET INSERT-Klausel vorkommen. Eine Spalte darf nicht mehrmals in einer Folge von Spaltennamen oder in mehr als einer SET INSERT-Klausel enthalten sein.

Eine angegebene Spalte (optional durch column_name oder Spaltenname in der set_insert_clause) ist eine Zielspalte. Die Zielspalten können in beliebiger Reihenfolge angegeben werden.

● Wenn kein Spaltenname und keine SET INSERT-Klausel angegeben ist, so hat das die gleiche Wirkung wie die Angabe einer Folge von Spalten, die alle Spalten der Tabelle in der bei der CREATE TABLE-Anweisung bzw. CREATE VIEW-Anweisung angegebenen Reihenfolge enthält. In diesem Fall sind alle vom Benutzer definierten Spalten der Tabelle Zielspalten.

● Die Anzahl der Ausdrücke insert_expression muss der Anzahl der Zielspalten entsprechen. Dem i-ten Spaltennamen ist der i-te Ausdruck zugeordnet.

● Ausdrücke extended_expression und Subqueries subquery können gleichzeitig angegeben werden.

● Es können eine oder mehrere Subqueries angegeben werden.

● Die angegebenen Subqueries dürfen nur genau eine Ergebniszeile liefern.

● Die Anzahl der im QUERY-Ausdruck query_expression angegebenen selektierten Spalten muss der Anzahl der Zielspalten entsprechen.

● Alle Pflichtspalten der durch den Tabellennamen identifizierten Tabelle müssen Zielspalten sein.

● Wenn der Tabellenname eine View-Tabelle identifiziert, werden Zeilen in die der View-Tabelle zugrundeliegende(n) Basistabelle(n) eingefügt. Die Zielspalten des angegebenen Tabellennamens korrespondieren in diesem Fall mit Spalten von Basistabellen, die der View-Tabelle zugrundeliegen. Im folgenden identifiziert der Begriff Zielspalte immer die korrespondierende Spalte der Basistabelle.

#### <extended_expression>

Die Angabe eines erweiterten Ausdrucks extended_expression kann durch die Angabe eines Ausdrucks oder eines der Schlüsselwörter DEFAULT bzw. STAMP erfolgen.

● Ausdruck expression
Ein Ausdruck in einer INSERT-Anweisung darf keine Spaltenspezifikation enthalten.
Der durch eine Parameterspezifikation in einem Ausdruck angegebene Wert ist der Wert des dadurch identifizierten Parameters. Wenn ein Indikatorparameter angegeben wurde und dieser einen negativen Wert hat, ist der durch die Parameterspezifikation angegebene Wert der NULL-Wert.

● Schlüsselwort DEFAULT
DEFAULT bezeichnet den für die Spalte als Vorschlagswert (DEFAULT) verwendeten Wert.

● Schlüsselwort STAMP
Das Datenbanksystem ist in der Lage, eindeutige Werte zu generieren. Es handelt sich dabei um eine fortlaufende Nummer, die bei X'000000000001' beginnt. Die Werte werden aufsteigend vergeben, wobei nicht sichergestellt werden kann, dass eine Folge von Werten lückenlos ist. Das Schlüsselwort STAMP liefert den nächsten vom Datenbanksystem generierten Wert.
Das Schlüsselwort STAMP kann in der INSERT-Anweisung oder in der UPDATE-Anweisung verwendet werden, allerdings nur auf Spalten vom Datentyp CHAR(n) BYTE mit n>=8.
Wenn der Anwender den generierten Wert erfahren möchte, bevor er auf eine Spalte angewandt wird, muss die SQL-Anweisung NEXT STAMP-Anweisung verwendet werden.

#### IGNORE TRIGGER

Sie können durch Angabe von IGNORE TRIGGER steuern, dass durch die INSERT-Anweisung kein INSERT-Trigger ausgeführt wird.

#### NOWAIT

Wenn Sie NOWAIT angeben, dann wird im Fall einer Sperrkollision nicht auf die Freigabe einer Sperre gewartet, sondern sofort mit einem Fehler zurückgekehrt.

#### Weitere Informationen

● Datentyp der Zielspalte und Datentyp des einzufügenden Wertes

● Join-View-Tabelle, QUERY-Ausdruck, CONSTRAINT-Definition, Trigger in INSERT-Anweisung