SQL 解説書

INSERT

INSERT ステートメントは、表または視点に行を挿入します。 行を視点に挿入することは、その行をその視点の基礎表に挿入することでもあります。

呼び出し

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

許可

このステートメントを実行するには、ステートメントの許可 ID に、 以下の特権の少なくとも 1 つが含まれている必要があります。

さらに、ステートメントの許可 ID には、 INSERT ステートメントで使用する全選択で参照される表または視点のそれぞれに対して、 以下の特権の少なくとも 1 つが含まれている必要があります。

静的 INSERT ステートメントの場合、GROUP 特権は検査されません。

構文

>>-INSERT INTO----+-table-name-+-------------------------------->
                  '-view-name--'
 
>-----+----------------------------+---------------------------->
      |    .-,--------------.      |
      |    V                |      |
      '-(-----column-name---+---)--'
 
                .-,------------------------------------.
                V                                      |
>-----+-VALUES------+-+-expression-+----------------+--+--------+-><
      |             | +-NULL-------+                |           |
      |             | '-DEFAULT----'                |           |
      |             |    .-,-----------------.      |           |
      |             |    V                   |      |           |
      |             '-(------+-expression-+--+---)--'           |
      |                      +-NULL-------+                     |
      |                      '-DEFAULT----'                     |
      '-+---------------------------------------+---fullselect--'
        |       .-,--------------------------.  |
        |       V                            |  |
        '-WITH-----common-table-expression---+--'
 
注:common-table-expression (共通表式) と fullselect (全選択) の構文については、 照会 を参照してください。

説明

INTO table-name または view-name
挿入操作の対象のオブジェクトを指定します。 table-name (表名) または view-name (視点名) は、 それぞれアプリケーション・サーバーに存在する表または視点を指定していなければならず、 カタログ表、要約表、カタログ表の視点、または読み取り専用の視点は指定できません。

視点の以下のような列には、値を挿入することはできません。

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

(column-name,...)
挿入する値の対象となる列を、 各 column-name に指定します。 それぞれの名前は、表または視点の列を指定する非修飾名でなければなりません。 同じ列を重複して指定することはできません。 挿入値を受け入れることのできない視点の列を指定することはできません。

列のリストを省略すると、 その表または視点のすべての列を左から右に指定したリストが暗黙に指定されます。 このリストはステートメントが準備される時点で確立され、 したがって、ステートメントの準備後に表に追加された列は含まれません。

暗黙の列リストは、準備時に確立されます。 したがって、アプリケーション・プログラムに組み込んだ INSERT ステートメントでは、 準備後に表または視点に追加された列は使用されません。

VALUES
挿入したい 1 つまたは複数の値を、この後に指定します。

ホスト変数を指定する場合、それらのホスト変数は、 ホスト変数の宣言規則に従ってそのプログラムで記述されていなければなりません。

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

expression
で定義されている expression (式) を使用できます。

NULL
ヌル値を指定します。 これはヌル値可能の列に対してのみ指定できます。

DEFAULT
デフォルト値を使用することを指定します。 DEFAULT を指定したときに使用される値は、 該当の列がどのように定義されているかによって決まります。次のとおりです。
  • 式に基づいて生成される列として列が定義されている場合は、 その式に基づいた列の値がシステムによって生成されます。
  • IDENTITY 文節が使用されている場合は、 データベース・マネージャーによって値が生成されます。
  • WITH DEFAULT 文節が使用されている場合は、 その列に対して定義された値が挿入されます (CREATE TABLEdefault-clause を参照してください)。
  • WITH DEFAULT 文節、GENERATED 文節、および NOT NULL 文節が使用されていない場合は、 NULL の値が挿入されます。
  • NOT NULL 文節が使用されているが GENERATED 文節は使用されていない場合、 または WITH DEFAULT 文節は使用されていないが DEFAULT NULL は使用されている場合は、 その列に対して DEFAULT キーワードを指定することができません (SQLSTATE 23502)。

WITH common-table-expression
後に続く全選択で使用する共通表式 (common-table-expression) を定義します。 common-table-expression (共通表式) については、共通表式を参照してください。

fullselect
新しい行の集合を、全選択の結果表の形式で指定します。 行の数は、1 つか、複数か、またはゼロのいずれかです。 結果表が空の場合、SQLCODE は +100 に設定され、 SQLSTATE は '02000' に設定されます。

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

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

規則

例 1: DEPARTMENT 表に、以下の新しい部門を挿入します。

  INSERT INTO DEPARTMENT
     VALUES ('E31', 'ARCHITECTURE', '00390', 'E01')

例 2: 例 1 と同様に DEPARTMENT 表に新しい部門を挿入しますが、 新しい部門に管理者は割り当てません。

  INSERT INTO DEPARTMENT (DEPTNO, DEPTNAME, ADMRDEPT)
     VALUES ('E31', 'ARCHITECTURE', 'E01')

例 3: 例 2 と同様の DEPARTMENT 表に 2 つの新しい部門を 1 つのステートメントを使用して挿入しますが、 新しい部門に管理者は割り当てません。

  INSERT INTO DEPARTMENT (DEPTNO, DEPTNAME, ADMRDEPT)
     VALUES ('B11', 'PURCHASING', 'B01'),
            ('E41', 'DATABASE ADMINISTRATION', 'E01')

例 4: EMP_ACT 表と同じ列を持つ一時表 MA_EMP_ACT を作成します。 EMP_ACT 表から、 'MA' で始まるプロジェクト番号 (PROJNO) を持つ行を MA_EMP_ACT 表にロードします。

  CREATE TABLE MA_EMP_ACT
        ( EMPNO CHAR(6)  NOT NULL, 
          PROJNO CHAR(6)  NOT NULL, 
          ACTNO SMALLINT  NOT NULL, 
          EMPTIME DEC(5,2), 
          EMSTDATE DATE, 
          EMENDATE  DATE )
  INSERT INTO MA_EMP_ACT 
     SELECT * FROM EMP_ACT    
       WHERE SUBSTR(PROJNO, 1, 2) = 'MA'
      

例 5: C プログラムのステートメントを使用して、 PROJECT 表に骨組みとなるプロジェクトを追加します。 プロジェクト番号 (PROJNO)、プロジェクト名 (PROJNAME)、 部門番号 (DEPTNO)、および責任者 (RESPEMP) は、ホスト変数から入手します。 プロジェクトの開始日 (PRSTDATE) として、現在の日付を使用します。 表のその他の列には、NULL (ヌル) 値を割り当てます。

 EXEC SQL  INSERT INTO PROJECT (PROJNO, PROJNAME, DEPTNO, RESPEMP, PRSTDATE)
              VALUES (:PRJNO, :PRJNM, :DPTNO, :REMP, CURRENT DATE);


脚注:

102
計算に先立って、元の値がソース・タイプにキャストされることはありません。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]