Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

INSERT - Sätze in Tabelle einfügen

INSERT fügt Sätze in eine bestehende Tabelle ein.

Um Sätze in die angegebene Tabelle einzufügen, müssen Sie Eigentümer dieser Tabelle sein oder das INSERT-Privileg für diese Tabelle besitzen. Zusätzlich muss der Transaktionsmodus der aktuellen Transaktion READ WRITE sein.

Die in der INSERT-Anweisung (und in Voreinstellungen) vorkommenden Spezial-Literale (siehe "Spezial-Literale") sowie die Zeitfunktionen CURRENT_DATE, CURRENT_TIME und CURRENT_TIMESTAMP werden einmal ausgewertet und die berechneten Werte gelten für alle Einfügungen.

Sind für die Tabelle bzw. die betroffenen Spalten Integritätsbedingungen definiert, werden diese nach dem Einfügen geprüft. Ist eine Integritätsbedingung verletzt, werden die Einfügungen rückgängig gemacht und ein entsprechender SQLSTATE gesetzt.



INSERT INTO tabelle

       { [ spaltenliste ] [COUNT INTO spalte ] werte-deklaration | DEFAULT VALUES }

       [RETURN INTO parameter-deklaration ]


werte-deklaration ::= { abfrageausdruck | VALUES { zeile_2 , zeile_2 ,... | zeile_1 } }


parameter-deklaration ::=
{

   : benutzervariable [[INDICATOR] : indikatorvariable ] |
       routinenparameter |
       lokale_variable

}


spaltenliste ::= (
{

     spalte |
     spalte[posnr] |
     spalte[min .. max] |
     spalte ( posnr ) |
     spalte ( min .. max )
},...

)


zeile_2 ::= { ( insert_ausdruck_2 ,...) | insert_ausdruck_2 }


zeile_1 ::= { ( insert_ausdruck_1 ,...) | insert_ausdruck_1 }


insert_ausdruck_2 ::= { ausdruck | NULL }


insert_ausdruck_1 ::= { ausdruck | NULL | DEFAULT | * | <{ wert | NULL},...> }



tabelle

Name der Tabelle, in die Sätze eingefügt werden sollen. Die Tabelle kann eine Basistabelle oder ein änderbarer View sein.


spaltenliste

Zählt die Spalten und die Ausprägungsbereiche von multiplen Spalten auf, deren Werte in den einzufügenden Sätzen in der INSERT-Anweisung angegeben werden, und legt die Reihenfolge dafür fest. Die Werte der restlichen Spalten in den einzufügenden Sätzen werden nicht in der INSERT-Anweisung angegeben, sondern sind DEFAULT-, NULL- oder von SESAM/SQL bestimmte Werte.


Keine spaltenliste angegeben:

Die INSERT-Anweisung gibt für alle Spalten der Tabelle tabelle die Werte in den einzufügenden Sätze an, außer für die mit COUNT INTO angegebenen Spalte, und zwar in der Spaltenreihenfolge, die mit CREATE TABLE und ALTER TABLE bzw. mit CREATE VIEW festgelegt wurde.

spalte

Einfache Spalte, deren Werte in den einzufügenden Sätze in der INSERT-Anweisung angegeben sind.

Für spalte geben Sie eine Spalte der angegebenen Tabelle an. Die Reihenfolge der Spalten muss nicht mit der Reihenfolge in der Tabelle übereinstimmen. Innerhalb der Spaltenliste darf eine einfache Spalte nicht doppelt vorkommen.


spalte(posnr) / spalte[posnr]

Element einer multiplen Spalte, dessen Werte in den einzufügenden Sätzen in der INSERT-Anweisung angegeben sind. Die multiple Spalte muss in der Tabelle enthalten sein.

Werden mehrere Elemente einer multiplen Spalte angegeben, so muss der angegebene Indexbereich lückenlos sein. Kein Element der multiplen Spalte darf mehfach vorkommen.

Für posnr geben Sie eine vorzeichenlose Ganzzahl >= 1 an.


spalte(min..max) / spalte[min..max]

Elemente einer multiplen Spalte, deren Werte in den einzufügenden Sätzen in der INSERT-Anweisung angegeben sind. Die multiple Spalte muss in der Tabelle enthalten sein.

Werden mehrere Elemente einer multiplen Spalte angegeben, so muss der angegebene Indexbereich lückenlos sein. Kein Element der multiplen Spalte darf mehrfach vorkommen.

Für min und max geben Sie vorzeichenlose Ganzzahlen >= 1 an; max muss >= min sein.

In der Syntax kursiv gedruckte eckige Klammern sind Sonderzeichen und müssen in der Anweisung angegeben werden.


COUNT INTO spalte

Einfache Spalte, deren Werte in den einzufügenden Sätzen von SESAM/SQL bestimmt werden und nicht in der INSERT-Anweisung angegeben werden dürfen (Zählspalte). spalte darf nicht in spaltenliste vorkommen.

Die Spalte muss einen Ganz- oder Festpunktzahltyp (SMALLINT, INT, DECIMAL, NUMERIC) haben und zu einem Primärschlüssel gehören. Die Spalte darf weder in einer Referenzbedingung noch in einer Check-Bedingung der Tabelle tabelle enthalten sein.

SESAM/SQL bestimmt die Werte der zugehörigen Spalte in allen einzufügenden Sätzen, und zwar derart, dass die Primärschlüsselwerte innerhalb der Tabelle eindeutig sind.


abfrageausdruck

abfrageausdruck ist ein Abfrage-Ausdruck, dessen Ergebnistabelle die benötigten Spaltenwerte der einzufügenden Sätze angibt. Für jeden Satz der Ergebnistabelle wird ein Satz in die Tabelle tabelle eingefügt. Liefert abfrageausdruck eine leere Tabelle, so wird kein Satz eingefügt und ein entsprechender SQLSTATE gesetzt, der mit WHENEVER NOT FOUND behandelt werden kann.


VALUES-Klausel

Die benötigten Spaltenwerte sind für jeden einzufügenden Satz einzeln mit zeile_2 bzw. zeile_1 angegeben. Die Tabelle aus allen diesen Sätzen bzw. aus diesem einen Satz spielt die Rolle der Ergebnistabelle bei abfrageausdruck.


zeile_2

Es werden soviele Sätze eingefügt, wie zeile_2 angegeben sind.

Jede zeile_2 muss gleich viele Spalten haben. Die Datentypen der Spalten der Ergebnistabelle ergeben sich aus den Regeln, die unter „Datentyp der Ergebnisspalten bei UNION" beschrieben sind. Enthält eine Spalte der Ergebnistabelle nur NULL, so ist ihr Datentyp der der korrespondierenden Spalte von tabelle.

insert_ausdruck_2

ausdruck

Der ausdruck von insert_ausdruck_2 muss einfach sein.

NULL

Die zugehörige Spalte in einzufügenden Sätzen muss einfach sein. Sie wird auf den NULL-Wert gesetzt.


zeile_1

Es wird ein einziger Satz eingefügt. Die Ergebnistabelle mit den benötigten Werten für diesen einzufügenden Satz besteht aus zeile_1.

insert_ausdruck_1

ausdruck

Der ausdruck von insert_ausdruck_1 muss entweder einfach sein, oder eine Benutzervariable, die ein Vektor mit mehreren Elementen ist. Ist eine solche Benutzervariable oder ein Aggregat angegeben, so muss die Anzahl der Elemente des Vektors bzw des Aggregats mit der Anzahl der Elemente der zugehörigen Spalte im einzufügenden Satz übereinstimmen.

NULL

Die zugehörige Spalte im einzufügenden Satz muss einfach sein. Sie wird auf den NULL-Wert gesetzt.

DEFAULT

Die zugehörige Spalte im einzufügenden Satz muss einfach sein. Sie wird auf den voreingestellten Wert gesetzt. Die Voreinstellung wird bei der Definition der Spalte festgelegt. Ist keine Voreinstellung definiert, so wird die Spalte auf den NULL-Wert gesetzt.

*

Die zugehörige Spalte im einzufügenden Satz muss einfach sein, einen Ganz- oder Festpunktzahltyp (SMALLINT, INT, DECIMAL, NUMERIC) haben und zu einem Primärschlüssel gehören. Die Spalte darf weder in einer Referenzbedingung noch in einer Check-Bedingung der Tabelle tabelle enthalten sein.

* darf nur einmal in der VALUES-Klausel vorkommen, und nicht zusammen mit COUNT INTO.

Der Wert der zugehörigen Spalte im einzufügenden Satz wird von SESAM/SQL bestimmt, und zwar so, dass die Primärschlüsselwerte innerhalb der Tabelle eindeutig sind.

<{wert, NULL},...>

Aggregat, das einer multiplen Spalte zugewiesen werden soll. Die Anzahl der Werte muss mit der Anzahl der Ausprägungen übereinstimmen.


In abfrageausdruck, insert_ausdruck_2 und insert_ausdruck_1 dürfen Sie keine Tabelle angeben, die sich auf die zu Grunde liegende Basistabelle, in die die neuen Sätze eingefügt werden, bezieht. Insbesondere dürfen Sie nicht tabelle angeben.

Die Anzahl der Spalten von abfrageausdruck, zeile_2 oder zeile_1 muss gleich der Anzahl der Spalten sein, die gemäß den Angaben bei spaltenliste und COUNT INTO anzugeben sind. Die i-te Spalte der Ergebnistabelle enthält die Werte für die i-te Spaltenangabe in spaltenliste (falls spaltenliste angegeben ist), bzw. für die i-te Spalte von tabelle, wobei eine mit COUNT INTO angegebene Spalte von tabelle nicht mitgezählt wird.

Für diese Zuweisungen gelten die im Abschnitt „Werte in Tabellenspalten eintragen" angegebenen Zuweisungregeln.

Die restlichen Spalten der eingefügten Sätze werden folgendermaßen gesetzt:

  • Die mit COUNT INTO angegebene Spalte wird auf einen von SESAM/SQL bestimmten Wert gesetzt.

  • Eine Spalte mit Voreinstellung wird auf den voreingestellten Wert (DEFAULT) gesetzt.

  • Eine Spalte ohne Voreinstellung wird auf den NULL-Wert gesetzt.


Ist tabelle ein View, so werden die Sätze in die zugrunde liegende Basistabelle eingefügt; die Spalten der Basistabelle, die nicht im View enthalten sind, werden ebenso gesetzt.


DEFAULT VALUES

Ein Satz, der nur aus den spaltenspezifischen Voreinstellungen besteht, in die Tabelle eintragen.

Die Spalten, für die eine Voreinstellung definiert ist, werden mit dem voreingestellten Wert belegt. Spalten, für die keine Voreinstellung definiert ist, werden mit dem NULL-Wert belegt.


RETURN INTO

Der von SESAM/SQL bestimmte Wert für die mit COUNT INTO angegebene Spalte, bzw. für den * als insert_ausdruck_1 wird in einem Ausgabeziel abgespeichert. Werden mehrere Sätze eingefügt, so wird der zuletzt von SESAM/SQL bestimmte Wert abgespeichert.

Die RETURN INTO-Klausel ist nur erlaubt, wenn entweder COUNT INTO angegeben ist, oder ein * als insert_ausdruck_1 verwendet wird.


:benutzervariable, routinenparameter, lokale_variable

Name einer Benutzervariablen (wenn die Anweisung nicht Bestandteil einer Routine ist) bzw. Name eines Prozedurparameters vom Typ INOUT oder OUT oder einer lokalen Variablen (wenn die Anweisung Bestandteil einer Routine ist). Der Wert der Zählspalte wird dem angegebenen Ausgabeziel zugewiesen.

Das Ausgabeziel muss ein numerischer Datentyp sein.

indikatorvariable

Name der Indikatorvariablen zur vorangehenden Benutzervariablen.

Werte für multiple Spalte einfügen

Bei einer multiplen Spalte können Werte für einzelne Spaltenelemente sowie für Teilbereiche eingefügt werden.

Ein Element einer multiplen Spalte wird durch seine Positionsnummer in der multiplen Spalte angesprochen.

Ein Teilbereich einer multiplen Spalte wird durch die Positionsnummern des ersten und letzten Elements des Teilbereichs angesprochen.

ACHTUNG! Die Position eines Elements innerhalb der multiplen Spalte kann sich von der Position des entsprechenden Elements in der INSERT-Anweisung unterscheiden. Wenn ein Element einer multiplen Spalte auf den NULL-Wert gesetzt wird, so werden alle Elemente mit einer höheren Position durch verringern ihrer Position um eine Stelle „nach links“ verschoben und der NULL-Wert erhält die höchste Position.

INSERT und Integritätsbedingungen

Durch Angabe von Integritätsbedingungen bei der Definition der Basistabelle können Sie den Wertebereich für die entsprechenden Spalten einschränken. Die in der INSERT-Anweisung angegebenen Werte müssen den definierten Integritätsbedingungen genügen.

INSERT und Transaktionssicherung

INSERT leitet außerhalb von Routinen eine SQL-Transaktion ein, wenn keine Transaktion offen ist. Durch die Definition eines Isolationslevels bei konkurrierenden Transaktionen können Sie steuern, welche Auswirkungen die INSERT-Anweisung auf diese Transaktionen hat (siehe Abschnitt „SET TRANSACTION - Transaktionseigenschaften festlegen").

Tritt während der INSERT-Anweisung ein Fehler auf, so werden alle bereits eingefügten Sätze wieder gelöscht.


Beispiele


Die beiden folgenden Anweisungen nehmen jeweils drei Sätze in die Tabelle AUFTRAG auf.
In der zweiten INSERT-Anweisung wird der Wert für den Primärschlüssel von SESAM/SQL bestimmt. Der zuletzt vergebene Wert wird in der Benutzervariablen ANRRET gespeichert.

INSERT INTO auftrag (anr, knr, konr, atext, fertigsoll, astnr)
   VALUES (345, 101, 20, 'Netzwerk:Installation', DATE'<date>',1),
          (346, 101, 20, 'Netzwerk:Test',         DATE'<date>',1),
          (347, 101, 20, 'Netzwerk:Schulung',     DATE'<date>',1)

INSERT INTO auftrag (knr, konr, atext, fertigsoll, astnr)
   COUNT INTO anr
   VALUES  (:KNR, :KONR, :ATEXT1, :FSOLL1, :ASTNR),
           (:KNR, :KONR, :ATEXT2, :FSOLL2, :ASTNR),
           (:KNR, :KONR, :ATEXT3, :FSOLL3, :ASTNR) 
   RETURN INTO :ANRRET


In einer Tabelle FRAUEN sind die Spalten VORNAME und NACHNAME wie in der Tabelle KONTAKT definiert. Durch die folgende INSERT-Anweisung werden alle weiblichen Kontaktpersonen in die Tabelle FRAUEN aufgenommen:

INSERT INTO frauen (vorname, nachname)
   SELECT vorname, nachname
   FROM kontakt 
   WHERE anrede IN ('Frau','Fraeulein','Mrs.','Ms.')

Siehe auch

DELETE, MERGE, UPDATE