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   然后回车即可
----------------------------------