sqlldr的使用示例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Sqlldr的使用
一个简单的sqlldr例子
在介绍功能之前,首先我们来试用一个最简单的sqlldr例子。
前提:安装了oracle客户端。
在“开始”->“运行”,输入“cmd”,回车。在打开的dos窗口里输入:sqlldr。如果显示如下,就表明你已经安装了sqlldr并且使用了。
下面,我为了快速学习,先忽略参数的说明。只管用一个简单的例子。
我在本机上安装了Linux的oracle数据库,现在先建立一个测试的表:
create table tdsxhwn.tbtestsqlldr(
id int,
name varchar(10)
)
然后配置一个连接服务,别名为LOCALHOST_ORCL
打开PL/SQL即可看到:
如果没有PL/SQL,也可以在$ORACLE_HOME\client_1\NETWORK\ADMIN\tnsnames.ora文件找到:
现在,我在“D:\sqlldr”文件夹里创建两个文件:
control.txt文件:
data.txt
然后,在刚才的dos窗口里输入:
sqlldr userid=tdsxhwn/td$123@LOCALHOST_ORCL control=d:\sqlldr\control.txt log= d:\sqlldr\out.log
上面sqlldr的格式是:
sqlldr userid=用户/密码@服务别名control= control文件路径log=日志文件路径
效果如下:
我们去数据库里查一下:
select * from tdsxhwn.tbtestsqlldr
该结果与data.txt的数据对比,可以看出有些不太一样
这时,我们到D:\sqlldr会发现有一个data.bad和out.log的文件,”*.bad”通常就是记录插入数据库失败的行,而”out.log”是我们刚才指定的日志名,打开data.bad可以看到:
4##gdktcattsoft
kk##name
刚好这两行是没有插入到表tdsxhwn.tbtestsqlldr的。
打开out.log可以看到其中一些信息:
这里告诉了我们,第三和第四行记录发生了什么样的错误
而第五行:7##gd##catt;由于超出了字段数量,超出部分自动被截取掉了。
Sqlldr拥有的功能
加载可变长度或指定长度的记录
固定程度数据load 可以通过position 来指定
跳过数据行
导入数据时修改数据
将数据导入多个表
导入选定的记录
导入时跳过某些字段
导入多行记录
对记录字段记录进行拆分
将多个数据文件同时load 进数据库
load 数据到表分区
null if 空替代
详细见sqlloader使用指南。
去字段值双引号
现在,我们把data.dat改为:
把control.txt改为:
先truncate掉数据表tdsxhwn.tbtestsqlldr,再执行重新执行sqlldr命令。查询数据库可以看到:
现在明白了,数据库先去掉了数据的双引号,然后再入库。
FIELDS TERMINATED BY " ## " :表示数据字段之间用“##”号分隔;OPTIONALLY ENCLOSED BY ' " ':表示数据字段值用“””双引号括起来;" str '\n' ":表示数据行用“\n”分行,默认以行来分行。
如果我们的值如种结构:
那么我们修改control.txt文件如下:
先truncate掉数据表tdsxhwn.tbtestsqlldr,再执行重新执行sqlldr命令。查询数据库可以看到:
对数据行换行情况
我们修改data.dat为:
把control.txt修改如下:
先truncate掉数据表tdsxhwn.tbtestsqlldr,再执行重新执行sqlldr命令。查询数据库可以看到: