2011-06-29 45 views
4

をするためのオプションをスキップ:以下のようにSQL Loader制御ファイルを使用する場合は、Oracle SQL Loaderは複数infiles

OPTIONS(**skip=1**,bindsize=1048576,rows=1024) 
LOAD DATA 
INFILE 'C:\Documents and Settings\FIRST.CSV' 
INFILE 'C:\Documents and Settings\SECOND.CSV' 
APPEND 
INTO TABLE table_name 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS 
(
fields 
) 

それはFIRST.CSVファイルのヘッダー行をスキップし、それは、OracleにSECOND.CSVからヘッダー行をロード表。私の解決策は、この制御ファイルを2つの別々のファイルに分割することです。 1つの制御ファイルに準拠する方法はありますか?

答えて

6

あなたは一つの制御ファイルを使用して行うことができますが、それはまだあなたがSQLLDR二回実行するために必要になります。

制御ファイル:

OPTIONS(skip=1,bindsize=1048576,rows=1024) 
LOAD DATA 
APPEND 
INTO TABLE table_name 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS 
(
    fields 
) 

をしてから、このようにSQLLDR実行します。

sqlldr control=control.ctl data=FIRST.CSV 
sqlldr control=control.ctl data=SECOND.CSV 

もう一つの選択肢は、WHEN句を使ってレコードをチェックできるということです。

OPTIONS(bindsize=1048576,rows=1024) 
LOAD DATA 
INFILE 'C:\Documents and Settings\FIRST.CSV' 
INFILE 'C:\Documents and Settings\SECOND.CSV' 
APPEND 
INTO TABLE table_name 
WHEN (field1 <> 'ContentsOfField1InHeaderRow') 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS 
(
    fields 
) 

ヘッダーに固定テキストが含まれている場合は、フィールドの1つの内容に基づいてスキップすることができます。ファイルのサイズによっては、sqlldrへの2回の呼び出しで、WHENの使用がパフォーマンスに影響する可能性があります。

関連する問題