DB2 Version 10.1 for Linux, UNIX, and Windows

INSERT ステートメント

INSERT ステートメントは、 表、ニックネーム、またはビュー、あるいは指定された全選択の基礎になる表、 ニックネーム、またはビューに、行を挿入します。

行をニックネームに挿入することは、 その行をそのニックネームが参照するデータ・ソース・オブジェクトに挿入することでもあります。 このビューに対する挿入操作用に INSTEAD OF トリガーが定義されていない場合、 行をビューに挿入することは、その行をそのビューの基本となる表に挿入することでもあります。 このようなトリガーが定義されている場合は、トリガーが代わりに実行されます。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 このステートメントは、動的に作成できる実行可能ステートメントです。

許可

ステートメントの許可 ID によって保持されている特権には、少なくとも以下のいずれかの権限が含まれていなければなりません。
  • ターゲット表、ビュー、またはニックネームに対する INSERT 特権
  • ターゲット表、ビュー、またはニックネームに対する CONTROL 特権
  • DATAACCESS 権限
さらに、ステートメントの許可 ID には、INSERT ステートメントで使用する全選択で参照される表、ビュー、またはニックネームのそれぞれに対して、以下の権限の少なくとも 1 つが含まれている必要があります。
  • SELECT 特権
  • CONTROL 特権
  • DATAACCESS 権限

静的 INSERT ステートメントの場合、GROUP 特権はチェックされません。

挿入操作の対象がニックネームの場合は、データ・ソースでステートメントが実行されないうちは、 そのデータ・ソース上のオブジェクトに対する特権は考慮されません。 この時点で、データ・ソースに接続するために使用される許可 ID は、 データ・ソースのオブジェクトに対して操作を行うのに必要な特権を持っている必要があります。 ステートメントの許可 ID は、データ・ソースの別の許可 ID へマップできます。

構文

構文図を読む構文図をスキップする
>>-INSERT INTO--+-table-name-------+---------------------------->
                +-view-name--------+   
                +-nickname---------+   
                '-(--fullselect--)-'   

>--+-----------------------+--+---------------------+----------->
   |    .-,-----------.    |  '-| include-columns |-'   
   |    V             |    |                            
   '-(----column-name-+--)-'                            

             .-,----------------------------.              
             V                              |              
>--+-VALUES----+-+-expression-+-----------+-+----------+-------->
   |           | +-NULL-------+           |            |   
   |           | '-DEFAULT----'           |            |   
   |           |    .-,--------------.    |            |   
   |           |    V                |    |            |   
   |           +-(----+-expression-+-+--)-+            |   
   |           |      +-NULL-------+      |            |   
   |           |      '-DEFAULT----'      |            |   
   |           '-row-expression-----------'            |   
   '-+-----------------------------------+--fullselect-'   
     |       .-,-----------------------. |                 
     |       V                         | |                 
     '-WITH----common-table-expression-+-'                 

>--+--------------+--------------------------------------------><
   '-WITH--+-RR-+-'   
           +-RS-+     
           +-CS-+     
           '-UR-'     

include-columns

               .-,----------------------.      
               V                        |      
|--INCLUDE--(----column-name--data-type-+--)--------------------|

説明

INTO table-nameview-namenickname、または (fullselect)
挿入操作の対象のオブジェクトを指定します。 名前は、以下のいずれかのオブジェクトを示すものでなければなりません。
  • アプリケーション・サーバーに存在する表、ビュー、またはニックネーム
  • remote-object-name を使用して指定されたリモート・サーバーにある表またはビュー
オブジェクトは、INSTEAD OF トリガーがサブジェクト・ビューに対する挿入操作用に定義されていない限り、カタログ表、システム保守マテリアライズ照会表、カタログ表のビュー、読み取り専用ビューであってはなりません。 行をニックネームに挿入することは、 その行をそのニックネームが参照するデータ・ソース・オブジェクトに挿入することでもあります。

挿入操作のオブジェクトが全選択である場合、CREATE VIEW ステートメントの説明の『注』にある『挿入可能ビュー』という項目で定義されているように、全選択が挿入可能になっている必要があります。

挿入操作のオブジェクトがニックネームである場合は、DEFAULT および UNASSIGNED の拡張標識変数の値は使用できません (SQLSTATE 22539)。

このビューに対する挿入操作用に INSTEAD OF トリガーがない場合、 以下のエレメントのようなビューの列には、値を挿入することはできません。
  • 定数、式、またはスカラー関数から得られる列。
  • そのビューの他の列と同じ基本表の列から得られる列。

挿入操作の対象となるビューにこのような列がある場合は、 列名のリストを指定する必要があり、そのリストに上記の列を指定してはなりません。

行が基礎となる基本表のうち 1 つだけのチェック制約を満たしている場合、 UNION ALL を使用して定義されているビューまたは全選択にその行を挿入できます。 行が複数の表のチェック制約を満たしている場合や、どの表のチェック制約も満たしていない場合は、 エラーが戻されます (SQLSTATE 23513)。

ビューのいずれかの基本表に BEFORE トリガーが含まれ、BEFORE トリガーに UPDATE、DELETE、INSERT のいずれかの操作、またはそれらの操作が組み込まれたルーチンを呼び出す操作が組み込まれている場合、そのビュー、または UNION ALL を使用して定義された全選択に行を挿入することはできません (SQLSTATE 42987)。

(column-name,...)
挿入する値の対象となる列を、各 column-name に指定します。 それぞれの名前は、指定された表、ビュー、またはニックネームの列、あるいは全選択の列を指定しなければなりません。 同じ列を複数回指定することはできません。 拡張標識変数が使用可能でない場合は、挿入値を受け入れることのできない列 (例えば、式を基にした列) を指定することはできません。

列のリストを省略すると、(暗黙的に隠されていない) 表またはビューのすべての列、あるいは全選択の選択リストのすべての項目を左から右に並べたリストが暗黙に指定されます。 このリストはステートメントが準備される時点で確立されます。 したがって、ステートメントの準備後に表に追加された列は含まれません。

include-columns
全選択の FROM 節にネストされているとき、 table-nameview-name などの列と一緒に INSERT ステートメントの中間結果表に組み込まれている列セットを指定します。 include-columns は、 table-nameview-name で指定されている列のリストの最後に付加されます。
INCLUDE
INSERT ステートメントの中間結果表に組み込まれる列のリストを指定します。 この節は、INSERT ステートメントが全選択の FROM 節にネストされている場合にのみ指定できます。
column-name
INSERT ステートメントの中間結果表の列を指定します。 名前は、他の組み込み列や、 table-name または view-name の列と同じ名前であってはなりません (SQLSTATE 42711)。
data-type
組み込み列のデータ・タイプを指定します。 データ・タイプは、CREATE TABLE ステートメントでサポートされているものでなければなりません。
VALUES
挿入する 1 つ以上の行の値を、この後に指定します。

VALUES 節で指定された各行は行変数が使用されていない限り、暗黙的または明示的な列のリスト、および INCLUDE 節で指定された列に割り当て可能でなければなりません。 括弧内の行の値リストが指定されると、最初の値はリストの最初の列に挿入され、2 番目の値は 2 番目の列に挿入されるといった具合で続きます。を指定した場合は 、行タイプ内のフィールドの数は、暗黙的または明示的な列のリストにある名前の数と一致していなければなりません。

expression
expression には、トピック『式』で定義されている式を指定できます。expression が行タイプの場合、括弧内に入れないでください。expression が変数である場合は、拡張標識変数を使用できる標識変数 (またはホスト構造の場合は標識配列) をホスト変数に組み込むことができます。拡張標識変数が使用可能であり、以下の内容のいずれかが該当する場合は、デフォルト (-5) または未割り当て (-7) の拡張標識変数の値は使用できません (SQLSTATE 22539)。
  • 式が明示的キャストによる単一ホスト変数より複雑な場合
  • ターゲット列が構造化タイプのデータ・タイプを持つ場合
NULL
NULL 値を指定します。 これは NULL 可能の列に対してのみ指定できます。
DEFAULT
デフォルト値を使用することを指定します。 DEFAULT を指定したときに使用される値は、 該当の列がどのように定義されているかによって決まります。次のとおりです。
  • 式に基づいて生成される列として列が定義されている場合は、 その式に基づいた列の値がシステムによって生成されます。
  • IDENTITY 節が使用されている場合は、 データベース・マネージャーによって値が生成されます。
  • ROW CHANGE TIMESTAMP 節を使用すると、データベース・マネージャーによって、データベース・パーティション内の表パーティションごとの固有のタイム・スタンプ値が、挿入される各行に生成されます。
  • WITH DEFAULT 節が使用されている場合は、 その列に対して定義された値が挿入されます (『CREATE TABLE』 の default-clause を参照してください)。
  • NOT NULL 節が使用されているが GENERATED 節は使用されていない場合、 または WITH DEFAULT 節は使用されていないか DEFAULT NULL が使用されている場合は、 その列に対して DEFAULT キーワードを指定することができません (SQLSTATE 23502)。
  • ニックネームに挿入する場合、 データ・ソースが照会言語構文中の DEFAULT キーワードをサポートしている場合に限り、 DEFAULT キーワードはそのデータ・ソースに対して INSERT ステートメントをパススルーします。
row-expression
列名が含まれていない、『行式』で記述されているタイプの行式を指定します。この行内のフィールド数は挿入のターゲットと一致しなければならず、各フィールドは対応する列に割り当て可能でなければなりません。
WITH common-table-expression
後続の fullselect で使用する共通表式を定義します。
fullselect
新しい行の集合を、全選択の結果表の形式で指定します。 行の数は、1 つか、複数か、またはゼロのいずれかです。 結果表が空の場合、SQLCODE は +100 に設定され、 SQLSTATE は '02000' に設定されます。

INSERT の基本オブジェクトおよび全選択の基本オブジェクトまたは全選択の副照会のいずれかが同一の表である場合、 行挿入の前に、全選択が完全に評価されます。

結果表の列の数は、列リストの名前の数と同じでなければなりません。 結果の最初の列の値はリストの最初の列に挿入され、 2 番目の値は 2 番目の列に挿入されます。 以下同様です。

結果列の値を指定する式が変数の場合は、拡張標識変数を使用できる標識変数をホスト変数に組み込めます。拡張標識変数が使用可能であり、expression が複数のホスト変数で成っているか、またはホスト変数が明示的にキャストされている場合は、デフォルトまたは未割り当ての拡張標識変数の値は使用できません (SQLSTATE 22539)。 デフォルトまたは未割り当ての値の効果は、fullselect の対応するターゲット列に適用されます。

WITH
fullselect が実行される分離レベルを指定します。
RR
反復可能読み取り
RS
読み取り固定
CS
カーソル固定
UR
非コミット読み取り
ステートメントのデフォルト分離レベルは、ステートメントがバインドされている パッケージの分離レベルです。WITH 節はニックネームには影響を与えません。ニックネームは常にステートメントのデフォルトの分離レベルを使用します。

規則