識別列への値の挿入

ユーザーが識別列に値を挿入したり、あるいはユーザーに代わりシステムに値を挿入させることができます。

例えば、表では、ORDERNO (識別列)、SHIPPED_TO (VARCHAR(36))、および ORDER_DATE (日付) という列があります。 この表に、次のステートメントを出すことにより、行を挿入することができます。

INSERT INTO ORDERS (SHIPPED_TO, ORDER_DATE) 
    VALUES ('BME TOOL', '2002-02-04')

この例では、識別列に入れる値をシステムが自動的に生成します。 このステートメントを DEFAULT キーワードを使用して書くこともできます。

INSERT INTO ORDERS (SHIPPED_TO, ORDER_DATE, ORDERNO) 
    VALUES ('BME TOOL', '2002-02-04', DEFAULT)

挿入後、IDENTITY_VAL_LOCAL 関数を使用して、システムが列に割り当てた値を知ることができます。

次の、SELECT を使用した INSERT ステートメントなど、ユーザーが識別列の値を指定する場合もあります。

INSERT INTO ORDERS OVERRIDING USER VALUE
   (SELECT * FROM TODAYS_ORDER)

この例では、OVERRIDING USER VALUE は、システムに対し、SELECT から識別列に与えられる値を無視して識別列に新規の値を生成するよう指定します。 識別列が GENERATED ALWAYS 文節を指定して作成された場合には、OVERRIDING USER VALUE が使用されることが必要です。GENERATED BY DEFAULT の場合にはオプションです。 GENERATED BY DEFAULT 識別列に OVERRIDING USER VALUE が指定されない場合は、SELECT でその列に提供される値が挿入されます。

OVERRIDING SYSTEM VALUE を指定することにより、システムに、SELECT からの値を GENERATED ALWAYS 識別列に強制的に使用させることができます。 例えば、以下のようにステートメントを出します。

INSERT INTO ORDERS OVERRIDING SYSTEM VALUE
   (SELECT * FROM TODAYS_ORDER)

この INSERT ステートメントでは SELECT からの値を使用し、識別列用の新規の値は生成しません。 GENERATED ALWAYS を使用して作成された識別列の場合は、OVERRIDING SYSTEM VALUE 文節を使用しなければ値を提供することはできません。