2016-04-17 11 views
0

私にはCSVファイルがあります。欠落値をNULLとしてロードするようにsqlldr制御ファイルに指示する方法を教えてください。 3行目は、欠損値が、私の中でNULLとして挿入されるように、あなたがここに私の制御ファイルを編集するために私を助けてもらえCSVsqlldr制御ファイルにNULLとして欠損値をロードするように指示します。

1,Name1 
2,Name2 
3, 
4,Name3 

例を(つまり、テーブルスキーマは、特定の列にNULLができます)テーブル

Create table test 
(id Number(2), name Varchar(10), primary key (id)); 

制御ファイル

LOAD DATA INFILE '{path}\CSVfile.txt' 
INSERT INTO test 
FIELDS TERMINATED BY ',' 
(id CHAR, 
name CHAR 
) 

答えて

1

は私がTRAILING NULLCOLSを使用して仕事をすることがわかったが、それは、レコードラインの末尾に「空白」のためにする必要があります。

LOAD DATA INFILE {path}\Your_File 
INSERT INTO TABLE Your_Table 
TRAILING NULLCOLS 
FIELDS TERMINATED BY "," 
(
... your fields 
) 
+0

紛らわしいことに、外部テーブルのDDLは、「MISSING FIELD VALUES ARE NULL」を受け取りますが、SQLLDR制御ファイルではサポートされていないようです。 – YoYo

+0

@YoYo私はあなたにそれについて何かを教えてもらいたいが、私は傾けることはできない。私は外部テーブルでこのオプションを使用していません。 AskTomを試してみてください。ここであなたの質問に答えたり、新しいスレッドをここで開始したりすることができます。 –

0

私は、あなたがしなければならない必要があるすべては、このあると信じて:

name CHAR(10) NULLIF(name=BLANKS) 
+0

それはそれではありませんいいえ。何を与えたことは、単にレコードを無視し、廃棄するrecodrとして扱います。私はTRAILLING NULLCOLSがトリックを行うだろうことがわかった。 –

+0

もちろん、D'oh。私は私のコントロールファイルにもそれを持っています。 –

-1

データにNULLが含まれている可能性があることをSQL * Loaderに知らせる必要があります。

SQL * Loaderにヒントを与える2つの方法。

  • を使用してください。NULLCOLSオプションを使用してください。
LOAD DATA INFILE '{path}\CSVfile.txt' 
INSERT INTO test<br> 
FIELDS TERMINATED BY ',' 
TRAILING NULLCOLS 
(id CHAR, 
name CHAR 
) 
  • は、囲まれたフィールドを使用してCSVファイルを再作成し、次いで場合"abcd",""のように見える明確にあなたのデータ(引用符の間に何もない)でヌルを参照SQL * Loaderをすることができます ENCLOSED BY「"」を使用
LOAD DATA INFILE '{path}\CSVfile.txt' 
INSERT INTO test<br> 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
(id CHAR, 
name CHAR 
) 
+0

あなたは何を意味するのか分かりません。 'NVL(:home_points、0)'は、 'home_points'で' NULL 'で 'NULL'を代入します。これは私がやろうとしたことではありません。私は定義されていない値を 'NULL 'として記録することを望んだ。すなわち、' home_points'カラムはヌル可能である。 '0'は' NULL'値ではありません –

関連する問題