クロスローダー機能を使用したデータのロード

LOAD ユーティリティーは、動的 SQL SELECT ステートメントの出力を表に直接 ロードすることができます。 動的 SQL ステートメントは、ローカル・サーバーのデータ、または DRDA に準拠する任意のリモート・サーバーのデータに対して実行することができます。 この機能は、Db2 ファミリー・クロス・ローダー機能と呼ばれます。

変更の開始

始める前に

カーソルを使用してデータを読み込むに記載されている要件を満たしていることを確認してください。変更の終わり

このタスクについて

この機能によって、単一の LOAD ジョブを使用して、1 つのロケーションから別のロケーション へ、または同一ロケーションの 1 つの表から別の表へ、データを転送することができます。 このクロスローダー機能への入力は、他のソースからも可能です。 Db2 for z/OS®。 IBM® 情報統合機能を使用して、 Oracle や Sybase などの多様なソースからデータにアクセスできます。また、 Db2 データベースサーバーのファミリー全体に

注: 行または列アクセス制御セキュリティを使用するテーブルが、クロスローダー機能のデータソースまたはロードターゲットである場合、データは対応する行権限または列マスクで定義されたルールに従うことになります。 SYSIBM.SYSTABLES の CONTROL 列により、行または列のアクセス制御が表に対してアクティブになっているかどうか示されます。

プロシージャー

クロスローダー機能を使用してデータをロードするには、次のようにします。

  1. EXEC SQL ユーティリティーを使用して、カーソルを宣言します。 カーソル定義の中で、LOAD ジョブの入力データとして使用する 結果表を指定する SELECT ステートメントを指定し ます。
    SELECT ステートメントを作成する際、以下の規則を使用します。
    • SELECT ステートメントにある列名は、ロードされる表の列名と同じでなければなりま せん。 SELECT リストで AS 文節を使用して、ターゲット表の列名と一致するように SELECT ステートメントで戻される列名を変更することができます。
    • SELECT リストの列は、ターゲット表の列と同じ順序である 必要はありません。
    • SELECT ステートメントは、3 部構成の名前によってリモート表を参照する 必要があります。
    • 入力データまたはターゲット表内の特殊タイプに対してキャスト関数を指定する必要は ありませんが、SQL 内に付け加えられた WHERE 文節に対してキャスト関数を追加する必要がある場合もあります。
  2. LOAD文のINCURSORオプションでカーソル名を指定します。

    同じカーソルを使用して、複数の表をロードできます。

結果

LOAD ジョブをサブミットする場合、DB2 はカーソル定義の SELECT ステートメントについて構文解析を行い、エラーを検査します。 このステートメントが無効な場合、LOAD ユーティリティーはエラー・メッセージを出し、 実行を妨げている条件を示します。 このステートメント構文が有効なのに、実行時にエラーが発生する場合も、LOAD ユーティリティーは エラー・メッセージを出します。 エラーが検出されると、ユーティリティーは終了します。 カーソルの from 文節に data-change-table-reference を指定すると、 ロードが失敗した場合でも、ソースに対する変更はコミットされます。

エラーがなかった場合、このユーティリティーは、以下の規則に従って、 カーソルで示された結果表を、指定されたターゲット表にロードします。

  • LOAD は、順序ではなく、名前によって、入力データの列をターゲット表の列にマッチングします。
  • カーソル内の列数がロードされる表の列数よりも少ない場合は、DB2 は 欠落している列にそのデフォルト値をロードします。 この欠落している列が NOT NULL としてデフォルトなしで定義されている場合は、 この LOAD ジョブは失敗します。
  • ソース列が NULLABLE と定義されていて、対応する ターゲット列はデフォルトなしで NOT NULL と定義されている場合、この LOAD ジョブは失敗します。
  • IGNOREFIELDS YES を指定した場合は、LOAD は、ターゲット表に存在しない入力データの 列はいずれもスキップします。
  • ターゲット表のデータ・タイプがカーソルのデータ・タイプと一致しない場合は、DB2 は、 可能な限りデータを変換しようとします。 変換が失敗した場合は、LOAD ジョブも失敗します。 カーソル宣言の SELECT ステートメントで SQL 変換機能を使用することによって、このような 変換エラーを回避できることがあります。
  • 入力データのコード化スキームがターゲット表のコード化スキームと異なる場合、DB2 はコード化スキームを自動的に変換します。 ターゲット表の長さ定義は変換後データが収まるものにしてください。
  • ターゲット表に GENERATED ALWAYS 列がある場合、そこにデータをロードしようとすると、LOAD ジョブが失敗します。 この状態を回避するには、このカーソルについて SELECT ステートメントでこれらの列を指定しないか、これらの列をオーバーライドすることを LOAD ステートメントで指定します。

また、入力データまたはターゲット表内の特殊タイプに対してキャスト関数を指定する必要は ありませんが、SQL 内に付け加えられた WHERE 文節に対してキャスト関数を追加する必要がある場合もあります。