replace
(deptno position(1:2),
dname position(3:16),
loc position(17:29),
entire_line position(1:29)
)
begindata
10Accounting Virginia,USA
select * from dept;
1 10 Accounting Virginia,USA 10Accounting
Virginia,USA
使用position时,可以使用相对偏移量,也可以使用绝对偏移量。前面的例子使用了绝对偏移量,明确指定字段从哪开始,从哪结束,也可以将
前面的控制文件改写如下:
load data
infile *
into table dept
replace
(deptno position(1:2),
dname position(*:16),
loc position(*:29),
entire_line position(1:29)
)
begindata
10Accounting
Virginia,USA *指示控制文件得出上一个字段在哪里结束。因此,在这种情况下,(*:16)与(3:16)是一样的。注意,控制文件可以混合使用相对位置和绝对位置。
另外,使用*表示法时,可以把它与偏移量相加。例如dname从deptno结束之后的;两个字符开始,可以使用(*+2:16),即相当于(5:16).
position子句中的结束位置必须是数据结束的绝对列位置。有时,可能指定每个字段的长度更为容易,特别是如果这些字段是连续的。采用这种
方式,只需告诉sqlldr:记录从第一个字节开始,然后指定每个字段的长度。如下:
load data
infile *
into table dept
replace
(deptno position(1) char(2),
dname position(*) char(14),
loc position(*) char(13),
entire_line position(1) char(29)
)
begindata
10Accounting Virginia,USA
select * from dept;3、如何加载日期
使用sqlldr加载日期只需在控制文件中date数据类型,并指定要使用的日期掩码。这个日期掩码与数据库中to_char和to_date中使用的日期掩码一样。
如修改dept表如下:
alter table dept add last_updated date;
load data
infile *
into table dept
replace
fields terminated by ','
(deptno,
dname,
loc,
last_updated date 'dd/mm/yyyy'
)
begindata
10,Accounting,Virginia,1/5/2000
select * from dept;
1 10
Accounting
Virginia
2000-5-14、如何使用函数加载数据
如果想确保加载的数据是大写的,可以改写控制文件如下:
load data
infile *
into table dept
replace
fields terminated by ','
(deptno,
dname "upper(:dname)",
loc "upper(:loc)",
last_updated date 'dd/mm/yyyy'
)
begindata
10,Accounting,Virginia,1/5/2000
select * from dept;
1 10
ACCOUNTING










