ID 列のインポートでの考慮事項

インポート・ユーティリティーでは、入力データに ID 列の値があるかどうかにかかわりなく、ID 列が含まれている表にデータをインポートできます。

ID 関連のファイル・タイプ修飾子が使用されない場合、 このユーティリティーは次のような規則に従って動作します。

  • ID 列が GENERATED ALWAYS の場合、 入力ファイル内の対応する行の中に ID 列用の値がないか、 または NULL 値が明示的に指定されているときに、 表の行用の ID 値が生成されます。 ID 列に非 NULL 値を指定すると、その行はリジェクトされます (SQL3550W)。
  • ID 列が GENERATED BY DEFAULT の場合、 ユーザー提供値が指定されていれば、 インポート・ユーティリティーはその値を使用します。 データが欠落しているかまたは明示的に NULL であれば、 値が生成されます。

インポート・ユーティリティーは、ユーザー提供の ID 値に関して、 ID 列のデータ・タイプ (SMALLINT、INT、BIGINT、 または DECIMAL) の値に対して通常行う以外の余分な妥当性検査を行いません。 値が重複していても報告されません。 さらに、ID列を持つ表にデータをインポートする場合、compound=x修飾子は使用できません。

ID列を含む表へのデータのインポートを簡素化する方法は2つあります。 identitymissingidentityignoreファイルタイプ修飾子です。

ID 列のないデータのインポート
identitymissing修飾子を使用すると、入力データ・ファイルにID列の値(NULLではない)が含まれていない場合に、ID 列を持つ表のインポートがより便利になります。 例えば、 次のような SQL ステートメントで定義された表があるとします。
   create table table1 (c1 char(30),
                        c2 int generated by default as identity,
                        c3 real,
                        c4 char(1))
ユーザーは、ファイル(import.del)からTABLE1にデータをインポートできます。このデータは、ID 列を持たない表からエクスポートされる可能性があります。 以下に、このようなファイルの例を示します。
   Robert, 45.2, J
   Mike, 76.9, K
   Leo, 23.4, I
このファイルをインポートする 1 つの方法は、 次のように IMPORT コマンドを使用して、インポートする列を明示的にリストすることです。
   db2 import from import.del of del replace into table1 (c1, c3, c4)
ただし、多くの列を持つ表の場合、 この構文は扱いにくく、誤りを生じる可能性があります。 ファイルをインポートする別の方法は、次のようにidentitymissingファイルタイプ修飾子を使用することです。
   db2 import from import.del of del modified by identitymissing
      replace into table1
ID列
を使用したデータのインポートidentitymissingモディファイアは、いくつかの点で identityignoreモディファイアの反対です。入力データファイルにID列のデータが含まれていても、各行に対してデータを無視し、ID値を生成する必要があることをインポートユーティリティに示します。 例えば、ユーザーは、前述定義に従って、以下のデータをファイル(import.del)から TABLE1にインポートできます。
   Robert, 1, 45.2, J
   Mike, 2, 76.9, K   
   Leo, 3, 23.4, I
ユーザー指定値の 12、 および 3 が ID 列に使われない場合、 ユーザーは次のような IMPORT コマンドを使うことができます。
   db2 import from import.del of del method P(1, 3, 4)
      replace into table1 (c1, c3, c4)
ここでも、表に多くの列があると、 このアプローチは扱いにくく、誤りを生じる可能性があります。 identityignore 修飾子は、以下のように構文を単純化します。
   db2 import from import.del of del modified by identityignore
      replace into table1
ID 列を持つ表が IXF ファイルにエクスポートされると、 IMPORT コマンドの REPLACE_CREATE および CREATE オプションを使用して、ID 列のプロパティーを含む表を再作成できます。 このようなIXFファイルが、タイプGENERATED ALWAYSのID列を含む表から作成される場合、データ・ファイルを正常にインポートする唯一の方法は、identityignore修飾子を指定することです。 このようにしなければ、すべての行がリジェクトされます (SQL3550W)。
注: IMPORT コマンドの CREATE および REPLACE_CREATE オプションは非推奨になっており、将来のリリースで除去される可能性があります。