2016-09-08 56 views
0

データを区切りファイルからOracle 12cにロードする必要があります。sqlldr - ヌル値で行をスキップ

私のCTLファイルには、以下のようになります。

OPTIONS (skip=2,rows=1000, bindsize=100000, readsize=100000, discardmax=1, silent=header,feedback) 
load data 
CHARACTERSET UTF8 
insert into table XYZ 
WHEN FIELD2 <> '' 
fields terminated by '^' optionally enclosed by ',' 
trailing nullcols 
(
FIELD1 filler, 
FIELD2, 
FIELD3, 
MODIFIED_DATE "SYSDATE" 
) 

私のデータファイルでは、私はFIELD2 & FIELD3のためのNULLで少なくとも1つの行を期待しています。

私のデータファイルを想定している。

:意図したとおりに

ABC^DEF^GHI

ABC ^^

私の第二のレコードは以下のメッセージを表示して、廃棄されます

1行が正常に読み込まれました。

0データエラーのためにローがロードされません。

1すべてのWHEN句が失敗したため、ローはロードされません。

0すべてのフィールドがNULLであるため、ローはロードされません。

ただし、sqlldrの終了コードは2のままで、スクリプトが失敗します。 有効なレコード(FIELD2がNULLでない行)をロードする方法はありますか&正常に終了しますか?

ご協力いただきまして誠にありがとうございます。

ありがとうございました。

+0

私のデータファイルは以下の通りです: ABC^DEF^GHI ABC ^^ – ppatkar

答えて

0

失敗したWHEN条件は、sqlldrが検出されたときに非ゼロで終了する原因となります。

あなたはどちらかにする必要があります。その後、NULL
を有するものを削除

  • プリプロセスファイルし、あなたのテーブルにすべてのレコードを

  • ロードをロードする前に、NULLフィールドを持つこれらの行を削除します2列目

  • すべてのレコードをステージングテーブルにロードして、希望する行を選択します。
    into the ma表中の

  • あなたには、いくつかの研究を行い、その意志を参照する必要がありますので、それぞれの方法には長所と短所があり、外部表を使用し、メイン
    テーブル

にしたい行を選択あなたの状況に最適です。

+0

おかげさまで、ありがとうございました。私はファイルの前処理を終了してからロードします。 – ppatkar