INSERT (SQL)

#### Search Results

Search

# INSERT (SQL)

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)] [include-columns] [`OVERRIDING USER VALUE`] VALUE-LIST |

Dieses Dokument behandelt folgende Themen:

- Funktion

- Syntax-Beschreibung

- Beispiel

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.

Gehört zur Funktionsgruppe: Datenbankzugriffe und Datenbankänderungen

Siehe auch INSERT - SQL im Teil Natural for Db2 in der Database Management System Interfaces-Dokumentation:

## Funktion

Das SQL-`INSERT`-Statement dient dazu, in einer Tabelle eine oder mehrere neue Zeilen hinzuzufügen.

## Syntax-Beschreibung

Syntax-Element | Beschreibung
--- | ---
`INTO table-name` | INTO-Klausel: In der `INTO`-Klausel geben Sie an, in welcher Tabelle neue Zeilen hinzugefügt werden sollen. Siehe weitere Informationen zu `table-name`.
`column-list` | Spaltenliste: Syntax:
    column-name...
Als `column-list` können Sie `column-names` für eine oder mehrere Spalten angeben, die in der hinzugefügten Zeile Werte erhalten sollen. Bei Angabe einer `column-list` muss die Reihenfolge der angegebenen Spalten der Reihenfolge der Werte entsprechen, die entweder in der `insert-item-list` angegeben sind oder im angegebenen View enthalten sind (siehe unten). Wenn Sie bei `column-list` keine Spaltenliste angeben, werden die in der `insert-item-list` bzw. im View angegebenen Werte entsprechend einer impliziten Liste aller Spalten eingefügt, und zwar in der Reihenfolge, in der sie in der Tabelle stehen.
`include-columns` | Include Columns-Klausel: `include-columns` gibt zusätzlich zu den `table-name`-Spalten einen Satz Spalten in der Ergebnistabelle des `INSERT`-Statement an, wenn dieses in der `FROM`-Klausel eines `SELECT`-Statement verschachtelt ist. Weitere Informationen siehe include-columns.
`VALUES-clause` | VALUES-Klausel: Mit der `VALUES`-Klausel fügen Sie eine einzelne Zeile in die Tabelle ein. Siehe VALUES-Klausel weiter unten.
`OVERRIDING USER VALUE` | OVERRIDING USER VALUE-Klausel: Diese Klausel gehört zm SQL Extended Set. Diese Klausel bewirkt, dass der Wert ignoriert wird, der in der `VALUES`-Klausel angegeben ist oder von einem Fullselect für eine Spalte erzeugt wurde, die als `GENERATED ALWAYS` definiert worden ist.

#### VALUES-Klausel

Mit der `VALUES`-Klausel fügen Sie eine einzelne Zeile in die Tabelle ein. Der `VALUES`-Klausel kann entweder ein Stern (*) oder eine Spaltenliste (`column-list`) vorangestellt werden, und sie hat dementsprechend eine der folgenden Formen:

#### VALUES-Klausel mit vorangehender Stern-Notation

`VALUES` (`VIEW` view-name)

Wenn Sie Stern-Notation benutzen, müssen Sie in der `VALUES`-Klausel einen View angeben. Mit den Feldwerten des Views wird dann eine neue Zeile in die Tabelle eingefügt, wobei die Feldnamen des Views als Spaltennamen der Zeile verwendet werden.

#### VALUES-Klausel mit vorangehender Spaltenliste

[(column-list)] [`OVERRIDING USER VALUE`] VALUE-LIST

Wenn Sie bei `column-list` eine Spaltenliste angeben und in der `VALUES`-Klausel einen View referenzieren, muss die Anzahl der Spalten in der Spaltenliste der Anzahl der Felder im View innerhalb der `VALUE`-LIST entsprechen.

Wenn Sie keine Spaltenliste 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.

#### VALUE-LIST

Common Set-Syntax:

| `VALUES` |  | (`VIEW` view-name) (insert-item-list) |  | [FOR-n-ROWS-clause] |

Extended Set-Syntax:

| `VALUES` |  | (`VIEW` view-name) (insert-item-list) |  | [FOR-n-ROWS-clause] |
[`WITH_CTE` common-table-expression,...] select-expression |  | `WITH` |  | `RR` `RS` `CS` |  |  | [`QUERYNO` integer] |

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`VIEW view-name` | View-Name: Mit den Feldwerten dieses Views wird eine neue Zeile in die angegebene Tabelle eingefügt, wobei die Feldnamen des Views als Spaltennamen der Zeile benutzt werden.
`insert-item-list` | INSERT Single Row-Klausel: In der `insert-item-list` können Sie einen oder mehrere Werte angeben, die den in der `column-list` angegebenen Spalten zugeordnet 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, spezielle Register oder `NULL` sein. Informationen zu `view-name`, `constant` und `parameter` siehe Grundlegende Syntaxbestandteile . Siehe auch die Informationen zu `special-register`. Wenn der Wert `NULL` zugewiesen worden ist, bedeutet dies, dass das adressierte Feld keinen Wert erhalten soll (auch nicht den Wert `0` oder Leerzeichen). Beispiel für INSERT Single Row:
    ...
    INSERT INTO SQL-PERSONNEL (NAME,AGE)
      VALUES ('ADKINSON',35)
    ...
`FOR-n-ROWS-clause` | FOR n Rows-Klausel: Optionale Klausel, siehe FOR-n-ROWS-Klausel weiter unten.
`WITH_CTE common-table-expression` | WITH_CTE-Klausel: Diese Klausel gehört zum SQL Extended Set. Diese optionale Klausel ermöglicht die Definition einer Ergebnistabelle, die in einer `FROM`-Klausel des folgenden `SELECT`-Statements referenziert werden kann. Mehrere `common-table-expressions` können nach dem einzelnen Schlüsselwort `WITH_CTE` angegeben werden. Jeder `common-table-expressions` kann auch in der `FROM`-Klausel der nachfolgenden `common-table-expressions` referenziert werden. Weitere Informationen siehe WITH_CTE common-table-expression beim `SELECT`-Statement.
`select-expression` | INSERT Multiple Rows-Klausel: Diese Klausel gehört zum SQL Extended Set. Mit einem `select-expression` können Sie mehrere Zeilen in eine Tabelle einfügen. Der `select-expression` wird ausgewertet und jede Zeile der Ergebnistabelle wird so behandelt, als ob die Werte in der Zeile als Werte in einer `VALUES`-Klausel einer Single-Row-Insert-Operation angegeben werden. Weitere Informationen siehe Select-Ausdrücke. Beispiel für Insert Multiple Rows:
    ...
    INSERT INTO SQL-RETIREE (NAME,AGE,SEX)
      SELECT LASTNAME, AGE, SEX
      FROM SQL-EMPLOYEES
      WHERE AGE > 60
    ...
Anmerkung Die Anzahl der tatsächlich eingefügten Zeilen können Sie mit der Systemvariablen `*ROWCOUNT` überprüfen (siehe Systemvariablen-Dokumentation).
`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 Zeilen benutzten Isolationsstufe.
`CS` | Cursor Stability
`RR` | Repeatable Read
`RS` | Read Stability
`QUERYNO_integer` | QUERYNO-Klausel: Diese Klausel gehört zum SQL Extended Set. Diese Klausel gibt explizit die bei der `EXPLAIN`-Ausgabe und zur Ablaufverfolgung der Sätze für dieses Statement zu benutzende Anzahl an.

#### FOR-n-ROWS-Klausel

`FOR` |  | [:]_host-variable integer |  | `ROWS` | [atomic-clause]

Diese Klausel setzt sich aus den folgenden Subklauseln zusammen:

#### FOR [:] hostvariable/integer ROWS-Klausel

`FOR` |  | [:]_host-variable integer |  | `ROWS`

Die Angabe dieser Klausel ist optional. Sie sollte nur angegeben werden, wenn

- die Compiler-Option `DB2ARRY` angegeben wird und

- mehrere Zeilen aus 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 Zeilen 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 Zeilen aus Natural-Arrays in einer Schleife eingefügt werden. Anhand dieser Klausel können die in den Arrays enthaltenen Zeilen von einem SQL-Statement eingefügt werden.

Siehe Beispiel weiter unten.

Siehe auch den Teil Natural for Db2 in der Database Management System Interfaces-Dokumentation.

#### ATOMIC-Klausel

| `ATOMIC` `NOT ATOMIC CONTINUE ON SQLEXCEPTION` |

Diese Klausel gibt an, ob die Einfügung mehrerer Zeilen von Db2 als `ATOMIC`-Operation behandelt werden soll oder nicht.

Sie sollte nur angegeben werden, wenn

- die Compiler-Option `DB2ARRY` angegeben wird und

- mehrere Zeilen aus Arrays eingefügt werden sollen, die in der `insert-item-list` der VALUES-Klausel angegeben worden sind.

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`ATOMIC` | Gibt an, dass im Falle eines Fehlers keine Zeile in die Zieltabelle eingefügt wird. Dies ist der Standardwert.
`NOT ATOMIC CONTINUE ON SQLEXCEPTION` | Gibt an, dass im Falle von Fehlern alle Zeilen eingefügt werden, bei denen keine Fehler aufgetreten sind, während diejenigen Zeilen, bei denen Fehler aufgetreten sind, von Db2 entfernt werden.

Die in solchen Fällen zurückgegebenen sqlcodes entnehmen sie der Db2 SQL REFERENCE-Dokumentation.

## Beispiel

    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

### On this page

- Funktion
- Syntax-Beschreibung
- Beispiel