这个两天客户老是要求往临时表中导入一些文本数据,sql*loader也不太熟悉了
今天有空就总结一下。
一般要建立两个文件:控制文件和数据文件 ,如果数据少的话也可以合二为一
在导入完成之后会生成两个文件
*.bad 导入失败的数据
*.log 导入的日志信息
一 加载固定分割符隔开的数据
使用filed terminated by ',' optionally enclosed by '"'
例如:
create table t(oid int,desc1 varchar(10),create_time date);
建立 data.cvs 内容如下:
1,测试数据,2009-02-21 09:09:21
2,"测试数据,含有标点",2009-03-03 21:50:21
建立控制文件data.ctl如下:
load data
infile 'data.cvs'
into table t
fields terminated by ',' optionally enclosed by '"'
(oid,
desc1,
create_time date 'yyyy-mm-dd hh24:mi:ss'
)
调用sqlldr userid=dg@billy/chenli control=data.ctl
导入后查询的数据格式如下:
select * from t;
OID DESC1 CREATE_TIME
1 测试数据 2009-02-21 09:09:21
2 测试数据,含有标点 2009-03-03 21:50:21
2 rows selected
以上涉及到时间格式的导入 需要定义一下时间转换的格式
另外还有如果字段内容中含有与分割符相同的字符,需要使用optionally enclosed by来处理
二 加载字段固定长度的数据
比如
10whereareyou20090908
20iambillyfff20090807
在控制文件中使用
load data
infile 'data.cvs'
into table t
replace
(oid position(1:2),
desc1 position(*:13),
create_time postion(*:21) date 'yyyy-mm-dd hh24:mi:ss'
)
*指的是上一个字段的结束位置 desc1 position(*:13) 相当于desc1 position(3:13)
当然也可以不指定结束位置,这样来写
desc1 position(*) char(10) 等同于 desc1 position(*:13) 等同于 desc1 position(3:13)
另外还有如何在sqlldr中使用函数等功能下次再介绍。
阅读(473) | 评论(0) | 转发(0) |