Common Set Syntax:
INSERT
INTO
table-name
|
Extended Set Syntax:
INSERT
INTO
table-name
|
( |
This document covers the following topics:
For explanations of the symbols used in the syntax diagram, see Syntax Symbols.
Belongs to Function Group: Database Access and Update
See also the following sections in the Database Management System Interfaces documentation:
INSERT - SQL in the Natural for DB2 part.
INSERT - SQL in the Natural SQL Gateway part.
The SQL INSERT
statement is used to add one or more new
rows to a table.
Syntax Element | Description |
---|---|
INTO
table-name
|
INTO Clause:
In the See further information on
|
column-list
|
Column List:
Syntax: column-name... In the If a If the |
include-columns |
Include Columns Clause:
Specifies a set of columns that are included, along with the
columns of For further details, see include-columns. |
VALUES-clause |
Values Clause:
With the See VALUES Clause below. |
OVERRIDING USER
VALUE
|
OVERRIDING USER VALUE Clause:
This clause belongs to the SQL Extended Set. When you specify this clause, the value specified in the
|
With the VALUES
clause, you insert a single row
into the table. Depending on whether an asterisk (*) or a
column-list
has been specified, the
VALUES
clause can take one of the following forms:
VALUES (VIEW
view-name)
|
If asterisk notation is specified, a view must be specified in
the VALUES
clause. With the field values of this view, a new row
is inserted into the specified table using the field names of the view as
column names of the row.
[(column-list)]
[OVERRIDING USER VALUE ]
VALUE-LIST |
If a column-list
is specified
and a view is referenced in the VALUES
clause, the number of items
specified in the column list must correspond to the number of fields defined in
the view within the VALUE-LIST.
If no column-list
is specified,
the fields defined in the view are inserted according to an implicit list of
all the columns in the order they exist in the specified table.
Common Set Syntax:
VALUES |
[FOR-n-ROWS-clause] |
Extended Set Syntax:
VALUES |
[FOR-n-ROWS-clause] | |||||||||||||
[WITH_CTE
common-table-expression,...]
select-expression |
WITH |
[QUERYNO
integer]
|
Syntax Description:
Syntax Element | Description | |
---|---|---|
VIEW
view-name |
View Name:
With the field values of this view, a new row is inserted into the specified table using the field names of the view as column names of the row. |
|
insert-item-list |
INSERT Single Row:
In the If no The values to be specified in the
See the section Basic Syntactical Items for
information on If the value Example - INSERT Single Row: ... INSERT INTO SQL-PERSONNEL (NAME,AGE) VALUES ('ADKINSON',35) ... |
|
FOR-n-ROWS-clause |
FOR n Rows
Clause:
Optional clause, see FOR-n-ROWS-Clause below. |
|
WITH_CTE
common-table-expression |
WITH_CTE Clause:
This clause belongs to the SQL Extended Set. This optional clause permits defining a result table which can be
referenced in any For more information, see WITH_CTE common-table-expression in the section SELECT - SQL. |
|
select-expression
|
INSERT Multiple Rows:
This clause belongs to the SQL Extended Set. With a select-expression, you insert
multiple rows into a table. The
select-expression is evaluated and each row of the
result table is treated as if the values in this row were specified as values
in a VALUES
Clause of a single-row For further information, see Select Expressions. Example - Insert Multiple Rows: ... INSERT INTO SQL-RETIREE (NAME,AGE,SEX) SELECT LASTNAME, AGE, SEX FROM SQL-EMPLOYEES WHERE AGE > 60 ... Note: |
|
WITH
RR/RS/CS
|
WITH Isolation Level Clause:
This clause belongs to the SQL Extended Set. This clause allows the explicit specification of the isolation level used when locating the rows to be inserted. |
|
CS |
Cursor Stability | |
RR |
Repeatable Read | |
RS |
Read Stability | |
QUERYNO_integer
|
QUERYNO Clause:
This clause belongs to the SQL Extended Set. This clause explicitly specifies the number to be used in
|
FOR |
[:]_host-variable |
ROWS |
[atomic-clause] |
This clause is composed of the following subclauses:
FOR |
[:]_host-variable |
ROWS |
The specification of this clause is optional. It should only be specified, if
compiler option DB2ARRY
is specified and
multiple rows are to be inserted from arrays specified in the insert-item-list of the VALUES Clause.
If specified, [:]_hostvariable/integer determines the number of rows to be inserted into the DB2 table from the arrays specified in the insert-item-list of the VALUES Clause starting with the first occurrence.
The purpose of this clause is to improve the performance of programs inserting rows from Natural arrays in a loop. By using this clause, the rows contained in the arrays can be inserted by one SQL statement.
See example below.
See also the Natural for DB2 part of the Database Management System Interfaces documentation.
This clause specifies whether the insertion of multiple rows should be treated by DB2 as an atomic operation or not.
It should only be specified, if
compiler option DB2ARRY
is specified and
multiple rows are to be inserted from arrays specified in the
insert-item-list
of the
VALUES
Clause.
Syntax Description:
See the DB2 SQL REFERENCE for SQLCODEs returned in such cases.
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