Oracle 如何在通过sqlldr加载时忽略数据文件中不同数量的额外列字段
我有10个管道分离数据的数据文件。 数据文件的字段数可以少于10个,也可以多于10个。在这种情况下,我应该如何编写控制文件? 我的表中只需要10个字段。Oracle 如何在通过sqlldr加载时忽略数据文件中不同数量的额外列字段,oracle,sql-loader,Oracle,Sql Loader,我有10个管道分离数据的数据文件。 数据文件的字段数可以少于10个,也可以多于10个。在这种情况下,我应该如何编写控制文件? 我的表中只需要10个字段。 如果字段较少,则应将其填充为null,如果字段较多,则应忽略这些字段。我想说,您正在查找的是后面的null 顺便问一下,由于输入文件中有不同数量的字段,如何加载不同的数据类型?我猜想他们都是VARCHAR2s 下面是一个示例(我只使用了4列;不想输入那么多) 表说明: SQL> desc test Name
如果字段较少,则应将其填充为null,如果字段较多,则应忽略这些字段。我想说,您正在查找的是
后面的null
顺便问一下,由于输入文件中有不同数量的字段,如何加载不同的数据类型?我猜想他们都是VARCHAR2
s
下面是一个示例(我只使用了4列;不想输入那么多)
表说明:
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>
为了确保这一点,若在数据文件中有一个完整的空行作为输入,那个么表中的所有行都将作为null插入。对吧?我试过了。如果它真的是一个空行(没有字段分隔符,什么都没有),那么就不会加载这样一行。日志文件显示:1行未加载,因为所有字段均为空。