1

SQL ローダーを使用して CSV ファイルをロードする際にいくつかの問題に直面しています。

制御ファイルは次のとおりです。

LOAD DATA 
INFILE 'mp.csv'
BADFILE mp.bad'
INSERT 
INTO TABLE mp_staging
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
mp_id INTEGER,
mp_name CHAR,
mp_desc CHAR,
oid CHAR,
ptye_cd CHAR,
creation_tmstmp TIMESTAMP WITH TIME ZONE "YYYY-MM-DD HH24:MI:SS,FF9",
modified_tmstmp TIMESTAMP WITH TIME ZONE "YYYY-MM-DD HH24:MI:SS,FF9",
last_generation_tmstmp TIMESTAMP WITH TIME ZONE "YYYY-MM-DD HH24:MI:SS,FF9",
deact_dt DATE,
)

CSV ファイルのサンプル レコードを次に示します。

1083,"Test3","","mills_b","PRIVATE",2000-12-06 14:29:21.17,1999-12-06 14:29:21.17,2011-    10-01 04:03:44.6

116,"Mike1","","mills_b","PRIVATE",1999-09-15 11:15:29.42,1999-09-15 11:15:59.663,2011-    10-01 04:01:23.923,,0,"F",""

私は2つの問題に直面しています -

  1. 2 番目のレコードが挿入されますが、テーブルに挿入された値は 1083 ではなく、シーケンスによって生成されたように見えるまったく異なる番号であるため、テーブル内の mp_id が異なります。制御ファイル。

  2. 最初のレコードの読み込みに失敗し、次のエラーが表示されます:

レコード 1: 拒否 - 表 EQ_MP_STAGING、列 CREATION_TMSTMP でエラー。ORA-01841: (完全な) 年は -4713 から +9999 の間である必要があり、0 であってはなりません

これらの問題をデバッグできるように、誰かが正しい方向に私を助けることができますか?

4

3 に答える 3

2

秒とミリ秒の間の区切り文字は、CSV ファイルではドット ( 1999-12-06 14:29:21.17) ですが、フォーマットではコンマ ( YYYY-MM-DD HH24:MI:SS,FF9)です。

私の推測では、FIELDS TERMINATED BY ','ディレクティブと競合する可能性があります。

これを試すことができますか?

creation_tmstmp TIMESTAMP WITH TIME ZONE "YYYY-MM-DD HH24:MI:SS.FF9",
modified_tmstmp TIMESTAMP WITH TIME ZONE "YYYY-MM-DD HH24:MI:SS.FF9",
last_generation_tmstmp TIMESTAMP WITH TIME ZONE "YYYY-MM-DD HH24:MI:SS.FF9",
于 2012-06-22T09:52:21.730 に答える
1

この変更は、常にシーケンスからIDを設定しているテーブルにmp_id挿入トリガーがあることを示しています。mp_stagingID値を指定する機能が必要な場合、トリガーは渡された:new.mp_idものがnullであるかどうかを確認し、nullである場合にのみシーケンス値を割り当てることができます。また、シーケンスがロードしているどの値よりも高く設定されていることを確認する必要があります。そうしないと、後で衝突が発生する可能性があります。

于 2012-06-22T11:02:26.870 に答える
0

OK、エラーを把握しました。それはすべて、制御ファイルの定義に関連していました。私がしなければならなかったのは、データ型宣言を削除することだけでした。私が考えた限りでは、データ型を指定するときは、フィールドの制限を指定する必要がありました。POSITION(*)を指定して、これで可変長フィールドが処理されると考えてみましたが、再び同じエラーが発生しました。

LOAD DATA  
INFILE 'mp.csv' 
BADFILE mp.bad' 
INSERT  INTO TABLE mp_staging
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' 
TRAILING NULLCOLS 
( mp_id , 
mp_name , 
mp_desc , 
oid , 
ptye_cd , 
creation_tmstmp TIMESTAMP WITH TIME ZONE "YYYY-MM-DD HH24:MI:SS,FF9", 
modified_tmstmp TIMESTAMP WITH TIME ZONE "YYYY-MM-DD HH24:MI:SS,FF9",              last_generation_tmstmp TIMESTAMP WITH TIME ZONE "YYYY-MM-DD HH24:MI:SS,FF9", 
deact_dt )
于 2012-06-22T12:35:57.050 に答える