2

SQL Loader を介してデータセットを Oracle データベースにロードしています。
ファイルは次のctlようになります。

OPTIONS (DIRECT=TRUE)  
LOAD DATA   
CHARACTERSET WE8MSWIN1252   
INFILE test.csv  
 TRUNCATE  
 CONTINUEIF NEXT(1:1) = '#'  
 INTO TABLE FIETSKNOOPPUNTEN_A  
FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '$$'   
TRAILING NULLCOLS   
(CODE,  
STREET,  
MUNICIPALITY,  
X,  
Y)

レコードは次のようになります。

70.00|Hogeweg|Aardenburg|18370.00|366787.00

SQL ローダーを使用すると、すべてのレコードがロードされ、エラーは発生しません。小数点以下はすべて無視されますが、最初の列の最初の文字もスキップされます。この場合、データベースは、このレコードのコードが 70 ではなく 0 であることを示しています。csv ファイルのレコードの前にスペースを入れると、すべて正常に機能します。MS Access を介してファイルを再作成したり、ファイル内のand節を
削除したりするなど、いくつかのことを試しましたが、行き詰まりました。OPTIONSCHARCACTERSETctl

何か案は?ありがとう。

4

2 に答える 2

4

CONTINUEIF最初の文字が句の評価に使用されていると確信しています。すべての行で評価され、この最初の文字はこの句専用に使用されます。

おそらく、CONTINUEIF(複数の個別の行を単一の論理レコードに動的に連結する) によって有効になる機能を使用していません。この句を削除すると、スキップされた最初の文字の問題が解決するはずです。

于 2013-03-29T14:27:45.877 に答える
0

これを引き起こしているのは CONTINUEIF NEXT(1:1) = '#' の使用でしょうか。SQL*Loader が最初の文字が # であることをチェックしている場合、2 番目の文字から続いている可能性がありますか? CONTINUEIF NEXT PRESERVE (1:1) = '#' に変更してみてください

于 2013-03-29T14:27:53.570 に答える