使用 SQLLDR 加载分隔数据时跳过数据字段
Skipping data fields while loading delimited data using SQLLDR
考虑以下场景:
Table T1 (f1, f2, f3);
数据文件:
a|b|c|d
w|x|y|z
我想按如下方式跳过第二个字段加载此数据:
f1 f2 f3
--- --- ---
a d c
w z y
非常感谢您在构建控制文件以实现此目的方面的帮助或任何指示。
将要跳过的列定义为 FILLER。请记住,控制文件中列的顺序通常是它们在数据文件中的顺序。如果名称与 table 中的列相匹配,它就会去那里。
...
(
f1 CHAR, -- 1st field in the file, goes to column named f1 in the table
X FILLER, -- 2nd field in the file, ignored
f3 CHAR, -- 3rd field in the file, goes to column named f3 in the table
f2 CHAR -- 4th field in the file, goes to column named f2 in the table
)
换句话说,控制文件中列的顺序与它们在数据文件中的顺序相匹配,而不是它们在 table 中的顺序。这是按名称而不是顺序匹配的。
编辑 - 我添加了一些注释以供解释,但我相信它们不能位于实际文件中的那个位置。请参阅下面的完整示例:
创建 table:
CREATE TABLE T1
(
F1 VARCHAR2(50 BYTE),
F2 VARCHAR2(50 BYTE),
F3 VARCHAR2(50 BYTE)
);
控制文件,example.ctl:
load data
infile *
truncate
into table t1
fields terminated by '|' trailing nullcols
(
f1 CHAR,
x FILLER,
f3 CHAR,
f2 CHAR
)
BEGINDATA
a|b|c|d
w|x|y|z
运行它:
C:\temp>sqlldr userid=login/password@database control=example.ctl
SQL*Loader: Release 11.2.0.1.0 - Production on Wed Apr 22 11:25:49 2015
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Commit point reached - logical record count 2
Select 来自 table:
希望这对您有所帮助。
考虑以下场景:
Table T1 (f1, f2, f3);
数据文件:
a|b|c|d
w|x|y|z
我想按如下方式跳过第二个字段加载此数据:
f1 f2 f3
--- --- ---
a d c
w z y
非常感谢您在构建控制文件以实现此目的方面的帮助或任何指示。
将要跳过的列定义为 FILLER。请记住,控制文件中列的顺序通常是它们在数据文件中的顺序。如果名称与 table 中的列相匹配,它就会去那里。
...
(
f1 CHAR, -- 1st field in the file, goes to column named f1 in the table
X FILLER, -- 2nd field in the file, ignored
f3 CHAR, -- 3rd field in the file, goes to column named f3 in the table
f2 CHAR -- 4th field in the file, goes to column named f2 in the table
)
换句话说,控制文件中列的顺序与它们在数据文件中的顺序相匹配,而不是它们在 table 中的顺序。这是按名称而不是顺序匹配的。
编辑 - 我添加了一些注释以供解释,但我相信它们不能位于实际文件中的那个位置。请参阅下面的完整示例:
创建 table:
CREATE TABLE T1
(
F1 VARCHAR2(50 BYTE),
F2 VARCHAR2(50 BYTE),
F3 VARCHAR2(50 BYTE)
);
控制文件,example.ctl:
load data
infile *
truncate
into table t1
fields terminated by '|' trailing nullcols
(
f1 CHAR,
x FILLER,
f3 CHAR,
f2 CHAR
)
BEGINDATA
a|b|c|d
w|x|y|z
运行它:
C:\temp>sqlldr userid=login/password@database control=example.ctl
SQL*Loader: Release 11.2.0.1.0 - Production on Wed Apr 22 11:25:49 2015
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
Commit point reached - logical record count 2
Select 来自 table:
希望这对您有所帮助。