SqlLoader怎么使用

2020-07-10 08:04:34易采站长站整理


fields terminated by ',' optionally enclose by '"'

  它指定用逗号分隔数据字段,每个字段可以用双引号括起。如果把这个控制文件的最后部分修改如下:


fields terminated by ',' optionally enclosed by '"'
(deptno,dname,loc)
begindata
10,Sales,"Virginia,USA"
20,Accounting,"Va,""USA"""
30,Consulting,Virginia
40,Finance,Virginia
select * from dept
1 10 Sales Virginia,USA
2 20 Accounting Va,"USA"
3 30 Consulting Virginia
4 40 Finance Virginia

2)另一种常用的格式是制表符定界数据。有两种方法使用terminated by子句来加载这种数据:

   terminated by X’09’ –使用十六进制格式的制表符;若用ASCII,制表符应该是9


terminated by whitespace
--使用terminated by whitespace
load data
infile *
into table dept
replace
fields terminated by whitespace
(deptno,dname,loc)
begindata
10 Sales Virginia
select * from dept;
1 10 Sales Virginia
--使用terminated by X'09'
load data
infile *
into table dept
replace
fields terminated by X'09'
(deptno,dname,loc)
begindata
10 Sales Virginia
select * from dept;
1 10

Sales –因为一旦遇到一个制表符就会输出一个值。

因此,将10赋给deptno,dname得到了null,因为在第一个制表符和第二个制表符之间没有数据

3)sqlldr的filler关键字使用

如跳过制表符


load data
infile *
into table dept
replace
fields terminated by X'09'
(deptno,dummy1 filler,dname,dummy2 filler,loc)
begindata
10 Sales Virginia
select * from dept;
1 10 Sales Virginia

2、如何加载固定格式数据

   要加载定宽的固定位置数据,将会在控制文件中使用position关键字。


load data
infile *
into table dept
replace
(deptno position(1:2),
dname position(3:16),
loc position(17:29)
)
begindata
10Accounting Virginia,USA
select * from dept;
1 10 Accounting Virginia,USA

    这个控制文件没有使用terminated by子句;而是使用了position来告诉sqlldr 字段从哪里开始,到哪里结束。
对于position,我们可以使用重叠的位置,可以在记录中来回反复。如下修改dept表:


alter table dept add entire_line varchar(29);

并使用如下控制文件:


load data
infile *
into table dept
相关文章 大家在看