INSERT ステートメントを使用した行の挿入

表にデータを挿入する方法の 1 つは、SQL INSERT ステートメントを使用することです。 この方式は、少量のデータを挿入する場合、または別の表またはビューからデータを挿入する場合に便利です。

プロシージャー

表またはビューに新しい行を追加するには、

以下のいずれかの方法でINSERT文を発行します。
  • 単一行に挿入する列値を指定します。 VALUES 文節を使用して、定数、ホスト変数、式、DEFAULT、 または NULL を指定できます。
  • アプリケーション・プログラムで、 列値の配列を指定して、複数行を表に挿入します。 INSERT FOR nROWSステートメントのVALUES節でホスト変数配列を使って、列値の複数の行を表に追加します。
  • INSERT ステートメントに SELECT ステートメントを組み込んで、別の表またはビューに新しい行または行のデータが含まれていることを Db2 に通知します。

いずれの場合も、挿入する行ごとに、デフォルト値を持たない列があれば、 その列に値を指定する必要があります。 以下のいずれかの条件を満たす列については、 DEFAULT を指定して、Db2にその列のデフォルト値を挿入するように指示します。

  • この列は NULL 可能です。
  • 列はデフォルト値を指定して定義されている。
  • 列のデータ・タイプは ROWID である。 ROWID 列には必ずデフォルト値があります。
  • 列は ID 列である。 ID 列には常にデフォルト値があります。
  • 列は行変更タイム・スタンプ列である。

ROWID 列、ID 列、または行変更タイム・スタンプ列に挿入できる値は、その列が GENERATED ALWAYS または GENERATED BY DEFAULT のいずれで定義されているかどうかで決まります。

INSERT ステートメントの VALUES 文節を使用すれば、複数の列値から成る単一行を表に挿入できます。 値を指定する列のすべての名前を指定することも、 列名のリストを省略することもできます。 列名リストを省略する場合は、 列のすべての値を指定する必要があります。

推奨 :静的なINSERT文では、以下の理由により、値を指定するすべてのカラムに名前を付ける
  • INSERT ステートメントが表の形式に左右され ない。 (例えば、列が表に追加される際、ステートメントの変更は不要です。)
  • 値を順序どおりに指定しているかどうかが確認できる。
  • ソース・ステートメントを読むだけで、処理の内容が理解しやすくなる。

静的 INSERT ステートメントで列名を指定せずに、ある列が表に追加された 場合は、INSERT ステートメントが再バインドされるとエラーが発生することが あります。 INSERT ステートメントを変更して新しい列の値を組み込まない限り、INSERT ステートメントの どの再バインド後にもエラーが発生することになります。 このことは、新しい列にデフォルト値がある場合でも該当します。

列名をリストする場合は、 それらに対応する値を列名のリストと同じ順序で指定しなければなりません。

INSERT文の例

  • 次のステートメントは、 新しい部門に関する情報を YDEPT 表に挿入します。

    INSERT INTO YDEPT (DEPTNO, DEPTNAME, MGRNO, ADMRDEPT, LOCATION)
      VALUES ('E31', 'DOCUMENTATION', '000010', 'E01', ' ');

    新しい部門行を YDEPT 表に挿入したら、SELECT ステートメントを使用して、 その表に何がロードされたかを見ることができます。 次の SQL ステートメントにより、 挿入した新しい部門行のすべてが表示されます。

    SELECT *
      FROM YDEPT
      WHERE DEPTNO LIKE 'E%'
      ORDER BY DEPTNO;

    結果表は、以下の出力のようになります。

    DEPTNO  DEPTNAME                              MGRNO   ADMRDEPT  LOCATION
    ======  ====================================  ======  ========  ===========
    E01     SUPPORT SERVICES                      000050  A00       -----------
    E11     OPERATIONS                            000090  E01       -----------
    E21     SOFTWARE SUPPORT                      000100  E01       -----------
    E31     DOCUMENTATION                         000010  E01       -----------
  • 次のステートメントは、 新しい従業員に関する情報を YEMP 表に挿入します。 WORKDEPT 列は外部キーなので、その列 (E31) に対して挿入される値は、主キー列の値、つまり YDEPT 表の DEPTNO であることが必要です。

    INSERT INTO YEMP
      VALUES ('000400', 'RUTHERFORD', 'B', 'HAYES', 'E31', '5678', '1998-01-01',
              'MANAGER', 16, 'M', '1970-07-10', 24000, 500, 1900);
  • 次のステートメントも、行を YEMP 表に挿入します。 指定されていない列では NULL 値が認証されるため、Db2 は指定しない列に NULL 値を挿入します。

    INSERT INTO YEMP
      (EMPNO, FIRSTNME, MIDINIT, LASTNAME, WORKDEPT, PHONENO, JOB)
      VALUES ('000410', 'MILLARD', 'K', 'FILLMORE', 'D11', '4888', 'MANAGER');