Вы можете сделать с одним контрольным файлом, но для этого все равно потребуется дважды запустить 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
)
Если ваш заголовок всегда содержит фиксированный текст, вы можете пропустить его в зависимости от содержимого (одного из) полей. Однако использование WHEN может повлиять на производительность - в зависимости от размера файлов вам может быть лучше сделать два вызова sqlldr.