用于多个填充的Oracle Sql加载程序跳过选项

用于多个填充的Oracle Sql加载程序跳过选项,oracle,sql-loader,Oracle,Sql Loader,使用SQL加载程序控制文件时,如下所示: 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 '"'

使用SQL加载程序控制文件时,如下所示:

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
)

它跳过第一个.CSV文件的头行,但将头行从第二个.CSV加载到Oracle表中。我的解决方案是将此控制文件拆分为两个单独的文件。是否有办法遵守一个控制文件?

您可以使用一个控制文件,但仍然需要运行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
)
选项(bindsize=1048576,行数=1024)
加载数据
填充“C:\Documents and Settings\FIRST.CSV”
填充'C:\Documents and Settings\SECOND.CSV'
追加
输入表名称
何时(字段1'内容字段1InHeaderRow')
以“,”结尾的字段(可选地由“.”结尾的空字符括起)
(
领域
)

如果您的标题始终包含固定文本,您可以根据(其中一个)字段的内容跳过它。但使用WHEN可能会对性能产生影响-根据文件的大小,您最好两次调用sqlldr。

我刚才使用WHEN子句跳过标题
我将使用column1的列名作为示例
column1_DB是数据库中的列名,column1_CSV是CSV文件中的列名
如果您确定column1中的任何值都不会与列标题相同,那么这将起作用;如果是这种情况,您可以选择任何其他列,确保这些值永远不会与标题匹配

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
WHEN column1_DB <> 'column1_CSV'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'  TRAILING NULLCOLS
(
column1_DB CHAR(4000),
column2_DB CHAR(4000)
)
OPTIONS(**skip=1**,bindsize=1048576,rows=1024)
加载数据
填充“C:\Documents and Settings\FIRST.CSV”
填充'C:\Documents and Settings\SECOND.CSV'
追加
输入表名称
当column1_DB'column1_CSV'
以“,”结尾的字段(可选地由“.”结尾的空字符括起)
(
列1_DB CHAR(4000),
第2列数据库字符(4000)
)