生成列のインポートに関する考慮事項

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

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

  • 生成列の値が生成されるのは、入力ファイル内の対応する行にその列の値が存在しない場合か、NULL 値が明示的に指定されている場合です。 生成列に非 NULL 値を指定すると、その行はリジェクトされます (SQL3550W)。
  • サーバーが NULL 可能でない生成列に NULL 値を生成すると、そのフィールドが属するデータ行はリジェクトされます (SQL0407N)。 これが起きるのは、例えば、NULL 可能列でない生成列が 2 つの表の列の合計として定義されていて、 それらの表の列に入力ファイル内で NULL 値が指定された場合です。

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

生成列
を含まないデータのインポートこのgeneratedmissing修飾子を使用すると、入力データファイルに表に存在するすべての生成列の値(NULLSも含まない)が含まれない場合に、生成列を含む表へのデータのインポートがより便利になります。 例えば、 次のような SQL ステートメントで定義された表があるとします。
   create table table1 (c1 int,
                        c2 int,
                        g1 int generated always as (c1 + c2),
                        g2 int generated always as (2 * c1),
                        c3 char(1))
ユーザーは、ファイル(load.del)からTABLE1にデータをインポートできます。このデータは、生成列のない表からエクスポートされた可能性があります。 以下に、このようなファイルの例を示します。
   1, 5, J
   2, 6, K
   3, 7, I
このファイルをインポートする 1 つの方法は、 次のように IMPORT コマンドを使用して、インポートする列を明示的にリストすることです。
   db2 import from import.del of del replace into table1 (c1, c2, c3)
ただし、多くの列を持つ表の場合、 この構文は扱いにくく、誤りを生じる可能性があります。 ファイルをインポートする別の方法は、次のようにgeneratedmissingファイルタイプ修飾子を使用することです。
   db2 import from import.del of del modified by generatedmissing
      replace into table1
生成列
を含むデータのインポートgeneratedignore修飾子は、いくつかの点でgeneratedmissing修飾子の反対です。入力データファイルに生成されたすべての列のデータが含まれても、データは無視され、各行の値が生成される必要があることをインポートユーティリティに示します。 。 例えば、ユーザーは、前述定義に従って、以下のデータをファイル(import.del)から TABLE1にインポートできます。
   1, 5, 10, 15, J
   2, 6, 11, 16, K   
   3, 7, 12, 17, I
101112 ( g1の場合)、151617 ( g2の場合) のユーザー提供の非 NULL 値により、行は拒否されます (SQL3550W)。 リジェクトされないようにするには、 次のような IMPORT コマンドを発行します。
   db2 import from import.del of del method P(1, 2, 5)
      replace into table1 (c1, c2, c3)
ここでも、表に多くの列があると、 このアプローチは扱いにくく、誤りを生じる可能性があります。 generatedignore 修飾子は、以下のように構文を単純化します。
   db2 import from import.del of del modified by generatedignore
      replace into table1

INSERT_UPDATE の場合、生成列が主キー列でもあり、generatedignore 修飾子が指定されていれば、IMPORT コマンドは、generatedignore 修飾子を有効と見なします。 IMPORT コマンドが UPDATE ステートメントの WHERE 節でこの列をユーザー提供値に置換することはありません。