(转)sqlldr常规应用 (总结篇)
(2012-11-28 13:01:54)
标签:
杂谈 |
分类: oracle |
load
data
infile
*
into table
bonus
fields terminated by
","
(ename,job,sal)
begindata
smith,cleak,3904
allen,salesman,2891
ward,salesman,3128
........
把上术文件保存成a.ctl文件,用如下命令就可以导入
sqlldr userid/pass control=a.ctl
一,要加载的文件不是以逗号作分隔
a,修改原始数据,将分隔符替换成逗号
b,修改控制文件,将fields terminated by 的值修改成实际的分隔符
二,要加载的数据中包含分隔符怎么办,如下表kkk.dat
smith,cleak,3904
allen,"salesman,"ak"",2891
ward,"salesman,M",3128
这个时候就要修改控制文件
load
data
infile
kkk.dat
into table
bonus
fields terminated by ","
(ename,job,sal)
optinonally enclosed by ' " ' 默认就是双引号,如果是其他的,把双引号更改就可以了
三,数据文件没有分隔符怎么办,是定长字符串kkk,dat
smith
allen
ward
修改控制文件
load
data
infile
kkk.dat
truncate table
bonus
(
ename
position(1:5),
job position(7:15),
sal position(17:20)
)
position(*+2:15) ,相对偏移量,
表示从上一个位置结束后偏移二个开始取字符,载止到实际第15个字符
position(*)char(9)
相对偏移量+类型和长度的优势在于,你只需要为第一列指定开始位置,其他的只需要指定列长度就可以了
四,数据文件中的列比要导入的表的列少,且空列又必须赋值
如bonus中多一列comm,并赋初始值0,则可以这么写
load
data
infile
kkk.dat
truncate table
bonus
(
ename
position(1:5),
job position(7:15),
sal position(17:20),
comm '0'
)
如果要输入特殊值,则可以用函数来解决
load
data
infile
kkk.dat
truncate table
bonus
(
ename
position(1:5),