sql loader 工具它可以把一些以文本格式存放的数据顺利的导入到oracle数据库中,是一种在不同数据库之间进行数据迁移的非常方便而且通用的工具。缺点就速度比较慢(比直接INSERT INTO快多了),另外对blob等类型的数据就有点麻烦了 用法: SQLLDR keyword=value [,keyword=value,...]
1. 采用sql loader 工具导入
(以100W条测试数据)
1.1. 新建test.csv数据文件
格式如下:
1,hello1
2,hello2
3,hello3
... ...
十万条数据的csv文件同样由java小程序生成:
File file = new File("d:" + File.separator + "demo.txt"); // 要操作的文件
OutputStream out = null; // 声明字节输出流
out = new FileOutputStream(file, true); // 通过子类实例化
for (int i = 1; i <= 100000; i++) {
String str = i+","+"hello"+i+"\r\n"; // 要输出的信息
byte b[] = str.getBytes(); // 将String变为byte数组
out.write(b); // 写入数据
}
out.close(); // 关闭
1.2. 建立表格
create table test(id varchar2(255),name varchar2(255));
1.3. 建立控制文件test.ctl
load data
infile demo.csv
into table test
(
id char terminated by ',',
name char terminated by whitespace
)
PS: infile 指数据源文件 这里我们省略了默认的 discardfile result.dsc badfile result.bad
into table test 默认是INSERT,也可以into table resultxt APPEND为追加方式,或REPLACE
terminated by ',' 指用逗号分隔
terminated by whitespace 结尾以空白分隔
1.4. 导入数据
将ctl文件和csv文件放置在D盘根目录下,命令行中运行:
D:\>sqlldr userid=scott/tiger control=test.ctl
1.5. 测试结果
急速,10W条数据转眼导入结束,100W条数据耗时10s。
sql*loader 是一个程序, 用来把 文本文件里面的数据, 导入到 Oracle 数据库里面。
sql loader使用例子
a)SQLLoader将 Excel 数据导出到 Oracle
1.创建SQL*Loader输入数据所需要的文件,均保存到C:\,用记事本编辑:
控制文件:input.ctl,内容如下:
load data --1、控制文件标识
infile 'test.txt' --2、要输入的数据文件名为test.txt
append into table test --3、向表test中追加记录
fields terminated by X'09' --4、字段终止于X'09',是一个制表符(TAB)
(id,username,password,sj) -----定义列对应顺序
a、insert,为缺省方式,在数据装载开始时要求表为空
b、append,在表中追加新记录
c、replace,删除旧记录,替换成新装载的记录
d、truncate,同上
在DOS窗口下使用SQL*Loader命令实现数据的输入
C:\>sqlldr userid=system/manager control=input.ctl
默认日志文件名为:input.log
默认坏记录文件为:input.bad
2.还有一种方法:可以把EXCEL文件另存为CSV(逗号分隔)(*.csv),控制文件就改为用逗号分隔
LOAD DATA
INFILE 'd:\car.csv'
APPEND INTO TABLE t_car_temp
FIELDS TERMINATED BY ","
(phoneno,vip_car)
参考:http://hi.baidu.com/poyundao/item/c36ee8f22682b8c10dd1c8bb
延伸:
下面是一个简单的例子:
SQL*Loader
首先需要一个 控制文件test_main.ctl,内容如下:
LOAD DATA
INFILE *
INTO TABLE test_main
FIELDS TERMINATED BY ','
(ID, VALUE)
BEGINDATA
1,Test
其中,
第一行LOAD DATA意思是告诉SQL*Loader,要干啥? 这里是加载数据。
第二行INFILE *意思是数据从哪里来? 这里是包含在控制文件中。
第三行INTO TABLE 意思是数据要导到哪里? 这里是要到 test_main 表。
第四行FIELDS TERMINATED BY意思是数据之间用什么符号分隔? 这里是用 逗号 分隔。
第五行是数据要按什么顺序写到列里面
第六行BEGINDATA是告诉SQL*Loader,后面的都是数据了。
然后开始运行 sqlldr 程序
D:\temp>sqlldr userid=test/test123 control=test_main.ctl
SQL*Loader: Release 10.2.0.1.0 - Production on 星期日 3月 13 14:58:56 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
达到提交点 - 逻辑记录计数 1
导入
csv
文件
比喻数据库里有表t_province 字段1:province 字段2:city
CSV文件存放路径:f:\test.csv 列需与数据库保持一致
还需要编写一个test.ctl文件,内容如下:
load data
infile 'f:\城市.csv'
into table "T_PROVINCE"
fields terminated by ','
(province,city)
然后在cmd下,输入:sqlldr userid=clevergirl/clevergirl@ORCL_192.168.128.129 control=f:test.ctl 然后回车即可
----------------------------------
还有一种方法:http://www.itdatum.net/db/oracle/2014/09/7948.shtml