通过sqlldr加载时如何忽略数据文件中不同数量的额外列字段

How to ignore varying number of extra column Field in data file when loading through sqlldr

我有 10 个竖线分隔数据的数据文件。 数据文件可能少于 10 个字段或多于 10 个字段。在这种情况下我应该如何编写控制文件? 我的 table 中只需要 10 个字段。 如果字段较少,则应将其填充为空,如果字段较多,则应将其忽略。

我会说 TRAILING NULLCOLS 你要找的。

顺便问一下,由于输入文件中的字段数量不同,您如何加载不同的数据类型?我猜他们都是 VARCHAR2s.

这是一个示例(我只使用了 4 列;不想输入那么多)。

Table 描述:

SQL> desc test
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL1                                               VARCHAR2(10)
 COL2                                               VARCHAR2(10)
 COL3                                               VARCHAR2(10)
 COL4                                               VARCHAR2(10)

控制文件:

load data 
infile *
replace
into table test
fields terminated by "|" 
trailing nullcols
(
col1,
col2,
col3,
col4
)

begindata
123|Little|foot|four
456|Access||
789|two|three|four|five|six|seven
111|

加载会话及其结果:

SQL> $sqlldr scott/tiger@kc11g control=test31.ctl log=test31.log

SQL*Loader: Release 11.2.0.1.0 - Production on Uto Lis 22 08:02:23 2019

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Commit point reached - logical record count 3
Commit point reached - logical record count 4

SQL> select * from test;

COL1       COL2       COL3       COL4
---------- ---------- ---------- ----------
123        Little     foot       four
456        Access
789        two        three      four
111

SQL>