2017-01-09 8 views
0

私は、私はすでに場所でSQLLODERを持ってどこ一時テーブルにデータを挿入する必要が挿入部分

ID|NAME|DES 
1|A|B 
2|C|D 
3|E|F 

以下のようにCSV(パイプ区切り)ファイルを持っていますが、私のテーブルには1つの列しかありません。以下は、csvからロードするための制御ファイルの設定です。

OPTIONS (SKIP=1) 
LOAD DATA 
CHARACTERSET UTF8 
TRUNCATE 
INTO TABLE EMPLOYEE 
FIELDS TERMINATED BY '|' 
TRAILING NULLCOLS 
(
NAME 
) 

どのように私はcsvファイルからのみ2列目からのデータを選択し、テーブルEMPLOYEEに1列のみに挿入するのですか?

質問がある場合はお知らせください。

+0

あなたはすべての列をロードし、データをロードした後、あなたがしたくないものをドロップしてもらえますか?完璧な解決策ではありませんが、うまくいくはずです。 –

+0

これは可能です。そのような状況でも、他のすべての列の読み込みをスキップする 'Filler'を使用することができます。しかし、私は別の列を作成する必要があります。もう1つは、ファイル内で列の数が動的であることですが、2列目からのみgrepする必要があります。 @TimBiegeleisen –

答えて

1

a filler fieldを使用している場合は、データベーステーブルに一致する列を持つ必要はありません。それが実際のポイントです。関心のあるフィールドが常に第2のものであることが分かっている限り、ファイルに余分なフィールドがある場合は、制御ファイルを変更する必要はありません。指定しないでください。ちょうどフィラーIDフィールドを追加して

だから、この作品、および3フィールドのデータは、あなたが示したファイル:

OPTIONS (SKIP=1) 
LOAD DATA 
CHARACTERSET UTF8 
TRUNCATE 
INTO TABLE EMPLOYEE 
FIELDS TERMINATED BY '|' 
TRAILING NULLCOLS 
(
IF FILLER, 
NAME 
) 

Dmoe'dと:

SQL> create table employee (name varchar2(30)); 

$ sqlldr ... 

Commit point reached - logical record count 3 

SQL> select * from employee; 

NAME       
------------------------------ 
A 
C 
E 

データに複数のフィールドを追加します実際に興味があるフィールドの後ろにある限り、ファイルは違いはありません。external tablesについても同じことが働きます。これは、CSVファイルがデータベースサーバーで利用可能であれば、テンポラリ/ステージングテーブルの方が便利です。

0

ロードから除外する必要があるデータファイルの列は、FILLERとして定義できます。

次の例では、次のように使用します。すべての入力フィールドを列挙し、これらの列にフィラーを追加する必要があります。 ( IDフィラーは、 NAME、 DES FILLER)は ここで別の問題は、これだけ、例えばOPTIONS句を使用するCSVのようにヘッダ行を無視することです OPTIONS(SKIP = 1) 負荷データ...

よろしく、 R.

+0

質問の制御ファイルにはすでに 'skip'があります。また、あなたが気にするすべてのものの後にフィラーカラムを必要としません。 –

関連する問題