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