INSERT

INSERT ステートメントは、提供された値を使用して、1 つの表に 1 つ以上の行を挿入します。

呼び出し

このステートメントは、アプリケーション・プログラム内で DB2 CLI 関数を用いて使用することができます。 また、CLP を介して出すこともできます。

構文

>>-INSERT INTO--表名--+----------------+------------------------>
                      |    .-,----.    |
                      |    V      |    |
                      '-(----列名-+--)-'
 
                .-,------.
                V        |
>--+-VALUES--(----| 式 |-+--)-+--------------------------------><
   '-SELECT ステートメント----'
 
式:
 
   .-演算子--------------------.
   V                           |
|----+---+--+-リテラル-------+-+--------------------------------|
     +-+-+  +-特殊レジスター-+
     '---'  +-関数-----------+
            '-(式)-----------'
 
演算子:
 
|--+-/-+--------------------------------------------------------|
   +-*-+
   +-+-+
   '---'
 
 

説明

INTO 表名
挿入操作に関する表を指定します。名前は、既存の表を示すもので なければなりませんが、カタログ表を指定してはなりません。
(列名,...)
挿入値が用意される列を指定します。この名前はそれぞれ、 表の列を示す非修飾名でなければなりません。同じ列を 2 回以上 指定してはなりません。

列リストを省略すると、表の各列を左から右の順に リストしたものを暗黙指定したことになります。

VALUES
挿入すべき 1 行の値を指定します。

各行に関する値の数は、列リスト内の名前の数と同じでなければなりません。 最初の値がリストの 1 列目に挿入され、2 番目の値が 2 列目に 挿入されるといった形で、以下同様に続いていきます。

式はリテラル、特殊レジスター、関数、または複合式のいずれでもかまいません。

CHAR、VARCHAR、BLOB(n)、DATE、TIME および TIMESTAMP データ・タイプに対する算術演算はサポートされません。

リテラル
リテラルは、サポートされるデータ・タイプ INTEGER、SMALLINT、 DECIMAL、CHAR(n)、VARCHAR(n)、BLOB(n)、DATE、TIME、 または TIMESTAMP の値にすることができます。
特殊レジスター
現在の日付、時刻およびタイム・スタンプを生成するために、 特殊レジスター CURRENT DATE、CURRENT TIME および CURRENT TIMESTAMP を使用することができます。
SELECT ステートメント
SELECT ステートメントの結果表の形式で、新規行のセットを指定します。 これは、1 行以上あることもありますし、まったくないこともあります。 結果表が空の場合は、SQLCODE が +100 にセットされ、SQLSTATE が 02000 にセットされます。SELECT ステートメントの 基本オブジェクトは、INSERT の基本オブジェクトにすることはできません。

規則

デフォルト値
列リストに存在しない列には、デフォルト値または NULL 値が挿入されます。デフォルト値または NULL 値が許されない列は、列リストに入れておく必要があります。

長さ
列の挿入値が数値である場合、その列は、 数値の整数部分を表せるだけの容量を持つ数値列でなければなりません。 列の挿入値がストリングである場合、その列は、ストリングの長さ以上の長さ属性 を持つストリング列でなければなりません。

割り当て
挿入値は、「DB2 Universal Database SQL リファレンス」に記載されている割り当て規則に従って列に割り当てられます。

例 1: 以下の指定に合致した従業員を EMPLOYEE 表に 挿入します。

INSERT INTO EMPLOYEE 
 VALUES ('002001', 'John', 'Harrison', '600', '4900', 50000, '01/12/1989')

例 2: 以下の指定に合致した新しい従業員を EMPLOYEE 表に挿入します。

     INSERT INTO EMPLOYEE (EMPNO, FIRSTNAME, LASTNAME)
       VALUES ('003002', 'Jim', 'Gray')

例 3: EMP_ACT_COUNT 表を作成します。 従業員番号 (EMPNO) および関連プロジェクトの数を使用して、EMP_ACT_COUNT に、EMP_ACT 表から 行をロードします。

CREATE TABLE EMP_ACT_COUNT
   ( EMPNO CHAR(6)  NOT NULL,
     COUNT          INTEGER)
 
INSERT INTO EMP_ACT_COUNT 
    SELECT EMPNO, COUNT(*)
   FROM EMP_ACT
   GROUP BY EMPNO  

制約事項:

  1. SELECT ステートメントの列データ・タイプは、ターゲット表の列定義と等しくなければなりません (ヌルの場合を除く)。
  2. ORDER BY および LIMIT 文節は許可されていません。

関連した解説