通过sqlldr加载时如何忽略数据文件中不同数量的额外列字段
How to ignore varying number of extra column Field in data file when loading through sqlldr
我有 10 个竖线分隔数据的数据文件。
数据文件可能少于 10 个字段或多于 10 个字段。在这种情况下我应该如何编写控制文件?
我的 table 中只需要 10 个字段。
如果字段较少,则应将其填充为空,如果字段较多,则应将其忽略。
我会说 TRAILING NULLCOLS
你要找的。
顺便问一下,由于输入文件中的字段数量不同,您如何加载不同的数据类型?我猜他们都是 VARCHAR2
s.
这是一个示例(我只使用了 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>
我有 10 个竖线分隔数据的数据文件。 数据文件可能少于 10 个字段或多于 10 个字段。在这种情况下我应该如何编写控制文件? 我的 table 中只需要 10 个字段。 如果字段较少,则应将其填充为空,如果字段较多,则应将其忽略。
我会说 TRAILING NULLCOLS
你要找的。
顺便问一下,由于输入文件中的字段数量不同,您如何加载不同的数据类型?我猜他们都是 VARCHAR2
s.
这是一个示例(我只使用了 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>