0

テープファイルからOracleデータベースにあるテーブルにいくつかのレコードを入力しようとしています。私は制御ファイルの助けを借りてこれを行おうとしています。
ただし、テープファイルには、主キー属性を対象とするスペースがほとんどありません。レコードを移行している間、ローダーはこれらのスペースをNULLと見なしているため、エラーがスローされます。

主キー属性に空白を挿入する方法はありますか?

前もって感謝します!

4

1 に答える 1

1

定義上、主キーを null にすることはできません。いいえ、null 値を持つレコードをロードすることはできません。ロード時にそのフィールドに一意の値を入れる方法を見つける必要があります。したがって、主キーの一意性要因により、定数は 1 つのレコードに対してのみ機能するため、オプションではありません。

これにはオプションがあります。ターゲットと同じ構造で主キーのないステージング テーブルを作成し、最初にそのテーブルにロードしてから、有効なレコードをテーブルに転送し、後で不良行を処理する方法を見つけることができます。

または、キーが数値ベースの場合、SQL*Loaderダイレクト・オプションを使用していない限り、そのフィールドのNULLをチェックし、NULLの場合は値に設定するon insertトリガーをその表に追加できます。無効です。これにはシーケンスがよく使用されますが、インスタンスでは、既存のキー値との衝突をテストする必要があります (たとえば、データ ソースのどの値よりもはるかに高い範囲で開始するシーケンスを作成します)。それでも、作成したキーがソース システムで最終的に複製され、ID に基づいてターゲットからソースまでレコードをトレースする機能が失われると、将来衝突が発生する可能性があるというリスクがあります。

于 2012-03-28T13:46:59.610 に答える