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

Im Folgenden werden einige Besonderheiten für INSERT-Anweisungen erläutert.

### Join-View-Tabelle in einer INSERT-Anweisung

● Wenn durch den Tabellennamen in einer INSERT-Anweisung keine Join-View-Tabelle identifiziert wird und eine Zeile mit dem Schlüssel der einzufügenden Zeile bereits existiert, hängt das Ergebnis von der Angabe der DUPLICATES-Klausel ab. Ist keine DUPLICATES-Klausel angegeben, scheitert die INSERT-Anweisung.

● Wenn der Tabellenname eine Join-View-Tabelle identifiziert, wird in jede Basistabelle, die der View-Tabelle zugrundeliegt, eine Zeile eingefügt. Wenn eine Zeile mit dem Schlüssel der einzufügenden Zeile in der Schlüsseltabelle der View-Tabelle bereits existiert, scheitert die INSERT-Anweisung. Wenn eine Zeile mit dem Schlüssel der einzufügenden Zeile in einer Basistabelle, die nicht Schlüsseltabelle oder View-Tabelle ist, bereits existiert, scheitert die INSERT-Anweisung, wenn die einzufügende Zeile nicht mit der existierenden übereinstimmt.

Siehe auch:

CREATE VIEW-Anweisung (create_view_statement)

### QUERY-Ausdruck in einer INSERT-Anweisung

· Wenn in der INSERT-Anweisung ein QUERY-Ausdruck angegeben ist, darf die angegebene Tabelle keine Join-View-Tabelle sein.
Der QUERY-Ausdruck definiert eine Ergebnistabelle, deren i-te Spalte der i-ten Zielspalte zugeordnet wird. Aus jeder Zeile der Ergebnistabelle wird eine Zeile der angegebenen Tabelle gebildet und in die Basistabelle eingefügt. Jede dieser Zeilen setzt sich wie folgt zusammen:
Alle Spalten der Basistabelle, die Zielspalten der INSERT-Anweisung sind, enthalten den Spaltenwert der Spalte der aktuellen Zeile der Ergebnistabelle, die ihr zugeordnet ist.

· Wenn in der INSERT-Anweisung kein QUERY-Ausdruck angegeben ist, wird genau eine Zeile in die angegebene Tabelle eingefügt. Die eingefügte Zeile setzt sich wie folgt zusammen: Alle Spalten der Basistabelle, die Zielspalten der INSERT-Anweisung sind, enthalten den der jeweiligen Zielspalte zugeordneten Wert.

Weiterhin gilt für die Zeile bzw. Zeilen, die eingefügt werden, folgendes:

· Alle Spalten der Basistabelle, die keine Zielspalten der INSERT-Anweisung sind und für die eine DEFAULT-Spezifikation existiert, enthalten den Vorschlagswert (DEFAULT-Wert).

· Alle Spalten der Basistabelle, die keine Zielspalten der INSERT-Anweisung sind und für die keine DEFAULT-Spezifikation existiert, enthalten den NULL-Wert.

### CONSTRAINT-Definition in einer INSERT-Anweisung

Wenn für Basistabellen, in die durch die INSERT-Anweisung Zeilen eingefügt werden, CONSTRAINT-Definitionen existieren, wird für jede einzufügende Zeile geprüft, ob sie die CONSTRAINT-Definition erfüllt. Wenn dies für mindestens eine Zeile nicht der Fall ist, scheitert die INSERT-Anweisung.

Wenn mindestens eine der Basistabellen, in die durch die INSERT-Anweisung Zeilen eingefügt werden, referenzierende Tabelle einer referentiellen CONSTRAINT-Definition ist, wird für jede einzufügende Zeile geprüft, ob der aus der Zeile resultierende Fremdschlüssel als Schlüssel bzw. als Wert eines mit UNIQUE definierten Index in der korrespondierenden referenzierten Tabelle (referenced_table) existiert. Wenn dies für mindestens eine Zeile nicht der Fall ist, scheitert die INSERT-Anweisung.

### Trigger in einer INSERT-Anweisung

Wenn für Basistabellen, in die durch die INSERT-Anweisung Zeilen eingefügt werden, Trigger definiert wurden, die nach einer INSERT-Anweisung auszuführen sind, so werden diese ausgeführt. Scheitert einer dieser Trigger, scheitert die INSERT-Anweisung.