Common Set-Syntax:
INSERT
INTO
table-name |
(* )
[VALUES-clause]
|
||
[(column-list)] VALUE-LIST |
Extended Set-Syntax:
INSERT
INTO
table-name |
(* )
[OVERRIDING USER
VALUE ] [VALUES-clause]
|
||
[(column-list)]
[OVERRIDING USER VALUE ]
VALUE-LIST |
Dieses Dokument behandelt folgende Themen:
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
Das SQL-Statement INSERT
dient dazu, einer Tabelle eine
oder mehrere neue Reihen hinzuzufügen.
INTO table-name |
INTO-Klausel:
In der INTO-Klausel geben Sie an, welcher Tabelle Reihen hinzugefügt werden sollen. Siehe auch table-name. |
---|---|
column-list |
column-list:
Syntax: column-name... In der column-list können Sie eine oder mehrere Spalten angeben, die in der hinzugefügten Reihe Werte erhalten sollen. Die Reihenfolge der angegebenen Spalten muss der Reihenfolge der Werte entsprechen, die in der insert-item-list oder im angegebenen View sind (siehe unten). Wenn Sie keine column-list angeben, werden die in der insert-item-list bzw. im View angegebenen Werte entsprechend der impliziten Liste aller Spalten eingefügt, und zwar in der Reihenfolge, in der sie in der Tabelle stehen. |
VALUES-clause |
Values-Klausel:
Mit dieser Klausel fügen Sie eine einzelne Reihe in die Tabelle ein. Siehe VALUES-Klausel weiter unten. |
insert-item-list |
INSERT Single Row:
In der insert-item-list können Sie einen oder mehrere Werte angeben, die den in der column-list angegebenen Spalten zugewiesen werden sollen. Die Reihenfolge der angegebenen Werte muss der der Spalten entsprechen. Wenn keine column-list angegben wird, werden die Werte in der insert-item-list nach einer impliziten Liste mit allein Spalten in der Reihenfolge eingefügt, wie sie in der Tabelle vorkommen. Die in der insert-item-list anzugebenden
Werten können constants,
parameters,
special-registers oder Informationen zu view-name siehe Abschnitt Basic Syntactical Items, constant und parameter. Siehe auch die Informationen zu special-register. Wenn der Wert Beispiel - ... INSERT INTO SQL-PERSONNEL (NAME,AGE) VALUES ('ADKINSON',35) ... |
OVERRIDING USER VALUE |
OVERRIDING USER VALUE-Klausel:
Diese Klausel gehört zum SQL Extended Set. Diese Klausel wird zurzeit nicht unterstützt. Falls sie verwendet wird, erzeugt sie einen Compiler-Fehler. |
Mit der VALUES
-Klausel fügen Sie eine einzelne Reihe in die
Tabelle ein. Der VALUES
-Klausel kann entweder ein Stern (*) oder
eine column-list vorangestellt werden, und sie hat
dementsprechend eine der folgenden Formen:
VALUES (VIEW view-name)
|
Wenn Sie Stern-Notation angeben, müssen Sie in der
VALUES
-Klausel einen View angeben. Mit den Feldwerten des Views
wird dann eine neue Reihe in die Tabelle eingefügt, wobei die Feldnamen des
Views als Spaltennamen der Reihe verwendet werden.
VALUES (
|
VIEW
view-name
|
) | ||
insert-item-list |
Wenn Sie eine column-list angeben und in der
VALUES
-Klausel einen View referenzieren, muss die Anzahl der
Spalten in der column-list der Anzahl der Felder im
View innerhalb der VALUE-LIST
entsprechen.
Wenn Sie keine column-list angeben, werden die im View angegebenen Werte entsprechend der impliziten Liste aller Spalten in der Reihenfolge, in der sie in der Tabelle stehen, eingefügt.
Common Set-Syntax:
VALUES |
(VIEW view-name)
|
[FOR-n-ROWS-clause] | ||||||||||||
(insert-item-list) |
Extended Set-Syntax:
VALUES |
(VIEW view-name)
|
[FOR-n-ROWS-clause] | ||||||||||||
(insert-item-list) | ||||||||||||||
[WITH_CTE
common-table-expression,...]
select-expression |
WITH |
RR |
[QUERYNO
integer]
|
|||||||||||
RS |
||||||||||||||
CS |
Syntax-Beschreibung:
VIEW view-name |
View-Name:
Mit den Feldwerten dieses Views wird eine neue Reihe in die angegebene Tabelle eingefügt, wobei die Feldnamen des Views als Spaltennamen der Reihe benutzt werden. |
---|---|
insert-item-list |
INSERT Single Row:
In der insert-item-list können Sie einen oder mehrere Werte angeben, die den in der column-list angegebenen Spalten zugewiesen werden sollen. Die Reihenfolge der angegebenen Werte muss mit der Reihenfolge der Spalten übereinstimmen. Wenn keine column-list angegeben wird, werden die Werte in der insert-item-list nach einer impliziten Liste mit allen Spalten in der Reihenfolge eingefügt, wie sie in der Tabelle vorkommen. Die in der insert-item-list
anzugebenden Werte können Konstanten, Parameter,
special-registers oder Informationen zu view-name, constant und parameter siehe Basic Syntactical Items. Siehe auch die Informationen zu special-register. Wenn der Wert Beispiel - INSERT Single Row: ... INSERT INTO SQL-PERSONNEL (NAME,AGE) VALUES ('ADKINSON',35) ... |
FOR-n-ROWS-clause | Optionale Klausel, siehe weiter unten. |
WITH_CTE common-table-expression |
Diese Klausel gehört zum SQL Extended Set. Diese optionale Klausel ermöglicht die Definition einer
Ergebnistabelle, die in einer Weitere Informationen siehe SELECT - Cursor-Oriented, WITH CTE common-table-expression,.... |
select-expression |
INSERT Multiple Rows:
Diese Klausel gehört zum SQL Extended Set. Mit einem select-expression können Sie mehrere Reihen in eine Tabelle einfügen. Der select-expression wird ausgewertet und jede Reihe der Ergebnistabelle wird so behandelt, als ob die Werte in der Reihe als Werte in einer VALUES-Klausel einer Single-Row-Insert-Operation angegeben werden. Weitere Informationen siehe Select Expressions. Beispiel - INSERT Multiple Rows: ... INSERT INTO SQL-RETIREE (NAME,AGE,SEX) SELECT LASTNAME, AGE, SEX FROM SQL-EMPLOYEES WHERE AGE > 60 ... Anmerkung: |
WITH RR/RS/CS |
WITH Isolation Level-Klausel:
Diese Klausel gehört zum SQL Extended Set. Diese Klausel ermöglicht die explizite Angabe des zum Auffinden der einzufügenden Reihen benutzten Isolation Level. Sie ist nur bei DB2-Datenbanken gültig. Wird sie bei anderen Datenbanken verwendet, verursacht sie Laufzeitfehler. |
QUERYNO_integer |
QUERYNO-Klausel:
Diese Klausel gehört zum SQL Extended Set. Diese Klausel wir zurzeit nicht unterstützt und wird ignoriert. |
FOR |
[:]_host-variable | ROWS |
ATOMIC |
||||||
integer | NOT ATOMIC
CONTINUE ON SQLEXCEPTION |
Diese Klausel setzt sich aus den folgenden Subklauseln zusammen:
FOR |
[:]_host-variable | ROWS |
||
integer |
Die Angabe dieser Klausel ist optional. Sie sollte nur angegeben werden, wenn
die Compiler-Option DB2ARRY
angegeben wird und
mehrere Reihen von Arrays eingefügt werden sollen, die in der
insert-item-list der VALUES
-Klausel
angegeben worden sind.
Wenn sie angegeben wird, legt die Option [:]
hostvariable/integer
die Anzahl der Reihen
fest, die in die DB2-Tabelle eingefügt werden sollen, und zwar von den Arrays,
die in der insert-item-list der
VALUES
-Klausel ab der ersten Ausprägung angegeben wurden.
Diese Klausel soll die Verarbeitungszeit der Programme verbessern, mittels derer Reihen von Natural-Arrays in einer Schleife eingefügt werden. Anhand dieser Klausel können die in den Arrays enthaltenen Reihen von einem SQL-Statement eingefügt werden.
Siehe Beispiel weiter unten.
ATOMIC |
||||
NOT ATOMIC
CONTINUE ON SQLEXCEPTION |
Diese Klausel gibt an, ob die Einfügung mehrerer Reihen von DB2 als eine Atomic-Operation behandelt werden sollte oder nicht.
Sie sollte nur angegeben werden, wenn
die Compiler-Option DB2ARRY
angegeben wird und
mehrere Reihen von Arrays eingefügt werden sollen, die in der insert-item-list der VALUES -Klausel angegeben worden sind.
Syntax-Beschreibung:
ATOMIC | Gibt an, dass im Falle eines Fehlers keine Reihe in die Zieltabelle eingefügt wird. Dies ist die Voreinstellung. |
---|---|
NOT ATOMIC CONTINUE ON SQLEXCEPTION | Gibt an, dass im Falle von Fehlern alle Reihen eingefügt werden, für die keine Fehler aufgetreten sind, während diejenigen Reihen, für die Fehler aufgetreten sind, von DB2 entfernt werden. |
In solchen Fällen zurückgegebene sqlcodes entnehmen sie der DB2 SQL REFERENCE.
DEFINE DATA LOCAL 01 NAME (A20/1:10) INIT <'ZILLER1','ZILLER2','ZILLER3','ZILLER4' ,'ZILLER5','ZILLER6','ZILLER7','ZILLER8' ,'ZILLER9','ZILLERA'> 01 ADDRESS (A100/1:10) INIT <'ANGEL STREET 1','ANGEL STREET 2' ,'ANGEL STREET 3','ANGEL STREET 4' ,'ANGEL STREET 5','ANGEL STREET 6' ,'ANGEL STREET 7','ANGEL STREET 8' ,'ANGEL STREET 9','ANGEL STREET 10'> 01 DATENATD (D/1:10) INIT <D'1954-03-27',D'1954-03-27',D'1954-03-27' ,D'1954-03-27',D'1954-03-27',D'1954-03-27' ,D'1954-03-27',D'1954-03-27',D'1954-03-27' ,D'1954-03-27'> 01 SALARY (P4.2/1:10) INIT <1000,2000,3000,4000,5000 ,6000,7000,8000,9000,9999> 01 L§ADDRESS (I2/1:10) INIT <14,14,14,14,14,14,14,14,14,15> 01 N§ADDRESS (I2/1:10) INIT <00,00,00,00,00,00,00,00,00,00> 01 ROWS (I4) 01 INDEX (I4) 01 V1 VIEW OF NAT-DEMO_ID 02 NAME 02 ADDRESS (EM=X(20)) 02 DATEOFBIRTH 02 SALARY 01 ROWCOUNT (I4) END-DEFINE OPTIONS DB2ARRY=ON /* <-- ENABLE DB2 ARRAY ROWCOUNT := 10 INSERT INTO NAT-DEMO_ID (NAME,ADDRESS,DATEOFBIRTH,SALARY) VALUES (:NAME(*), /* <-- ARRAY :ADDRESS(*) /* <-- ARRAY INDICATOR :N§ADDRESS(*) /* <-- ARRAY LINDICATOR :L§ADDRESS(*), /* <-- ARRAY DB2 VCHAR :DATENATD(1:10), /* <-- ARRAY NATURAL DATES :SALARY(01:10) /* <-- ARRAY NATURAL PACKED ) FOR :ROWCOUNT ROWS SELECT * INTO VIEW V1 FROM NAT-DEMO_ID WHERE NAME > 'Z' DISPLAY V1 /* <-- VERIFY INSERT END-SELECT END