一般セットの構文:
INSERT INTOtable-name |
|
|
拡張セットの構文:
INSERT INTOtable-name |
|
( |
|
このドキュメントでは、次のトピックについて説明します。
構文図で使用されている記号については、「構文記号」を参照してください。
関連機能グループ:データベースへのアクセスと更新
SQL INSERT ステートメントは、1 つ以上の行をテーブルに新しく追加するために使用します。
| 構文要素 | 説明 |
|---|---|
INTO
table-name |
INTO 節:
詳細については、 |
column-list |
列リスト:
構文: column-name...
|
VALUES-clause |
VALUES 節:
下記の「VALUES 節」を参照してください。 |
OVERRIDING USER
VALUE |
OVERRIDING USER VALUE 節:
この節は SQL 拡張セットに含まれます。 この節は現在はサポートされていません。使用すると、コンパイラエラーが発生します。 |
VALUES 節を使用して、1 つの行をテーブルに挿入します。アスタリスク(*)が指定されているか、または column-list が指定されているかによって、VALUES 節の形式は次のいずれかになります。
VALUES (VIEWview-name)
|
アスタリスク表記を指定する場合、VALUES 節にビューを指定する必要があります。このビューのフィールド値により、ビューのフィールド名を列名として使用して、新しい行が指定したテーブルに挿入されます。
VALUES (
|
|
|
) |
column-list を指定し、VALUES 節でビューを参照する場合、列リストに指定する項目数は、VALUE-LIST 内のビューに定義されたフィールド数に対応する必要があります。
column-list を指定しない場合は、ビューに定義されたフィールドが、すべての列の暗黙のリストに従って、指定したテーブルに存在する順序で挿入されます。
一般セットの構文:
|
|
VALUES |
|
|
[FOR-n-ROWS-clause] |
|
|||||||||
拡張セットの構文:
|
|
VALUES |
|
|
[FOR-n-ROWS-clause] |
|
|||||||||
[WITH_CTEcommon-table-expression,...] select-expression |
|
WITH |
|
|
|
[QUERYNOinteger]
|
|
|||||||
構文の説明:
| 構文要素 | 説明 | |
|---|---|---|
VIEW
view-name |
ビュー名:
このビューのフィールド値により、ビューのフィールド名を列名として使用して、新しい行が指定したテーブルに挿入されます。 |
|
insert-item-list |
INSERT 1 行:
値 例 - INSERT 1 行: ...
INSERT INTO SQL-PERSONNEL (NAME,AGE)
VALUES ('ADKINSON',35)
... |
|
FOR-n-ROWS-clause |
FOR n Rows 節:
オプションの節。下記の「FOR-n-ROWS-Clause」を参照してください。 |
|
WITH_CTE
common-table-expression |
WITH_CTE 節:
この節は SQL 拡張セットに含まれます。 このオプションの節では、後に続く 詳細については、「SELECT - SQL」の「WITH_CTE common-table-expression」を参照してください。 |
|
select-expression |
複数行の INSERT:
この節は SQL 拡張セットに含まれます。 select-expression では、multiple 行をテーブルに挿入します。select-expression が評価されると、結果テーブルの各行は、単一行の 詳細については、「選択式」を参照してください。 例 - 複数行の挿入: ... INSERT INTO SQL-RETIREE (NAME,AGE,SEX) SELECT LASTNAME, AGE, SEX FROM SQL-EMPLOYEES WHERE AGE > 60 ... 注意: |
|
WITH
RR/RS/CS |
WITH 分離レベル節:
この節は SQL 拡張セットに含まれます。 この節では、挿入する行を検索するときに使用する分離レベルを明示的に指定できます。DB2 データベースにのみ有効です。他のデータベースに使用すると、ランタイムエラーが発生します。 |
|
CS |
カーソルの安定 | |
RR |
繰り返し可能な読み込み | |
RS |
読み込みの安定 | |
QUERYNO_integer |
QUERYNO 節:
この節は SQL 拡張セットに含まれます。 この節は、現在はサポートされていないため無視されます。 |
|
FOR |
|
[:]_host-variable |
|
ROWS |
[atomic-clause] | ||||
この節は次の副節で構成されます。
FOR |
|
[:]_host-variable |
|
ROWS |
この節の指定はオプションです。指定する必要があるのは、次の場合のみです。
コンパイラオプション DB2ARRY が指定されている
複数の行が VALUES 節の insert-item-list で指定した配列から挿入される
指定する場合、[:]_hostvariable/integer では、VALUES 節の insert-item-list に指定した配列から DB2 テーブルに挿入する行の数を決定します(最初のオカレンスから挿入します)。
この節により、ループ内で Natural 配列から行を挿入するプログラムのパフォーマンスが向上します。この節を使用すると、配列内の行を 1 つの SQL ステートメントで挿入できます。
下記の例を参照してください。
|
|
|
|||
この節では、複数の行の挿入を DB2 で原子処理として扱うかどうかを指定します。
指定する必要があるのは、次の場合のみです。
コンパイラオプション DB2ARRY が指定されている
複数の行が VALUES 節の insert-item-list で指定した配列から挿入される
構文の説明:
| 構文要素 | 説明 |
|---|---|
ATOMIC |
エラーが発生した場合は、ターゲットテーブルに行を挿入しないことを指定します。
これはデフォルト値です。 |
NOT ATOMIC CONTINUE ON
SQLEXCEPTION |
エラーが発生した場合は、エラーのないすべての行を挿入し、エラーのある行を DB2 で破棄することを指定します。 |
このような場合に返される SQLCODE については、「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