sqlloader可以将文本格式的数据直接导入到ORACLE的表中,只做了一些小实验,对于大数据的效率没有尝试,blob字段的导入方式也没尝试。
在控制台输入 sqlldr可以看到用法说明。
-------------------------------------------------------------------------------------
在D盘下建立数据文件data.txt,用于数据的读取
1, 2001-3-6,
2, 2010-3-4,
3, 1998-12-9,
-----------------------------------------------------------------------------------
在D盘下建立控制文件control.txt,用于进行读取时的一些说明
load data
infile 'd:\data.txt'
append into table webinfo
(id char terminated by ',',
timestamp date(20) 'yyyy-mm-dd' terminated by ',',
name char terminated by whitespace)
--------------------------------------------------------------------------------
在数据库中建立表
create table webinfo
(
id int,
timestamp date,
name varchar2(100)
)
---------------------------------------------------------------------------------------
控制台执行 sqlldr userid=user/password control='control.txt' log='d:\log.txt'
达到提交点-逻辑记录计数 2
达到提交点-逻辑记录计数 3
查看d:\log.txt
---------------------------------------------------------------------------------------------------------
SQL*Loader: Release 10.2.0.1.0 - Production on 星期二 4月 6 21:46:32 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
控制文件: d:\data.ctl
数据文件: d:\data.txt
错误文件: d:\data.bad
废弃文件: 未作指定
(可废弃所有记录)
要加载的数: ALL
要跳过的数: 0
允许的错误: 50
绑定数组: 64 行, 最大 256000 字节
继续: 未作指定
所用路径: 常规
表 WEBINFO,已加载从每个逻辑记录
插入选项对此表 APPEND 生效
列名 位置 长度 中止 包装数据类型
------------------------------ ---------- ----- ---- ---- ---------------------
ID FIRST * , CHARACTER
TIMESTAMP NEXT 20 , DATE yyyy-mm-dd
NAME NEXT * WHT CHARACTER
表 WEBINFO:
3 行 加载成功。
由于数据错误, 0 行 没有加载。
由于所有 WHEN 子句失败, 0 行 没有加载。
由于所有字段都为空的, 0 行 没有加载。
为绑定数组分配的空间: 34432 字节 (64 行)
读取 缓冲区字节数: 1048576
跳过的逻辑记录总数: 0
读取的逻辑记录总数: 3
拒绝的逻辑记录总数: 0
废弃的逻辑记录总数: 0
从 星期二 4月 06 21:46:32 2010 开始运行
在 星期二 4月 06 21:46:32 2010 处运行结束
经过时间为: 00: 00: 00.07
CPU 时间为: 00: 00: 00.03
---------------------------------------------------------------------------------------
在datafile中故意将某些行数的格式弄错,可以在log中查看到所报出的信息。
---------------------------------------------------------------------------------------------
下面是来自http://yung.blog.dongfeng.net/771.html中控制文件的一个模板
LOAD DATA
INFILE 't.dat' // 要导入的文件
// INFILE 'tt.date' // 导入多个文件
// INFILE * // 要导入的内容就在control文件里 下面的BEGINDATA后面就是导入的内容, *和't.dat'不能同时存在
INTO TABLE table_name // 指定装入的表
BADFILE 'c:bad.txt' // 指定坏文件地址
************* 以下是4种装入表的方式
APPEND // 原先的表有数据 就加在后面
// INSERT // 装载空表 如果原先的表有数据 sqlloader会停止 默认值
// REPLACE // 原先的表有数据 原先的数据会全部删除
// TRUNCATE // 指定的内容和replace的相同 会用truncate语句删除现存数据
************* 指定的TERMINATED可以在表的开头 也可在表的内部字段部分
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
// 装载这种数据: 10,lg,"""lg""","lg,lg"
// 在表中结果: 10 lg "lg" lg,lg
// TERMINATED BY X '09' // 以十六进制格式 '09' 表示的
// TERMINATED BY WRITESPACE // 装载这种数据: 10 lg lg
TRAILING NULLCOLS ************* 表的字段没有对应的值时允许为空
************* 下面是表的字段
(
col_1 , col_2 ,col_filler FILLER // FILLER 关键字 此列的数值不会被装载
// 如: lg,lg,not 结果 lg lg
)
// 当没声明FIELDS TERMINATED BY ',' 时
// (
// col_1 [interger external] TERMINATED BY ',' ,
// col_2 [date "dd-mon-yyy"] TERMINATED BY ',' ,
// col_3 [char] TERMINATED BY ',' OPTIONALLY ENCLOSED BY 'lg'
// )
// 当没声明FIELDS TERMINATED BY ','用位置告诉字段装载数据
// (
// col_1 position(1:2),
// col_2 position(3:10),
// col_3 position(*:16), // 这个字段的开始位置在前一字段的结束位置
// col_4 position(1:16),
// col_5 position(3:10) char(8) // 指定字段的类型
// )
BEGINDATA // 对应开始的 INFILE * 要导入的内容就在control文件里
10,Sql,what
20,lg,show
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10945710/viewspace-631437/
,如需转载,请注明出处,否则将追究法律责任。