7

次のように SQL Loader 制御ファイルを使用する場合:

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 ファイルのヘッダー行をスキップしますが、ヘッダー行を SECOND.CSV から Oracle テーブルにロードします。私の解決策は、この制御ファイルを 2 つの別個のファイルに分割することです。1 つの制御ファイルに準拠する方法はありますか?

4

2 に答える 2

7

1 つの制御ファイルで実行できますが、それでも sqlldr を 2 回実行する必要があります。

制御ファイル:

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 つ) の内容に基づいてスキップできます。ただし、WHEN を使用するとパフォーマンスに影響を与える可能性があります。ファイルのサイズによっては、sqlldr を 2 回呼び出した方がよい場合があります。

于 2011-07-01T09:16:48.187 に答える