把txt或者csv文件导入oracle最方便的方法是通过plsql的文本导入器导入,但是导入大批量数据时文本导入器效率慢,可以使用oracle命令行sqlldr导入更快速。
sqlldr介绍:
SQL*Loader将外部文件中的数据加载到Oracle数据库表中,SQL使用两个文件:数据文件;控制文件。
数据文件就是你的txt或者csv文本文件,控制文件是你写的命令。
例如:
sqlldr userid=wjz/abc123456 control=sql_csv.ctl log=sqlldr_optionally_enclosed.log
其中ctl就是控制文件,log是日志,userid是oracle的用户和密码。
ctl文件如下:
options(skip=1,ROWS=1000)
load data
CHARACTERSET ZHS16GBK
infile '/home/oracle/test.csv'
insert into table "test"
fields terminated by ','
(
ACCT_MONTH,
ADDRESS_ID,
ADDRESS_NAME,
USER_NUM,
IPTV_NUM,
KD_NUM,
GH_NUM,
IS_FTTH,
MOFFICE_ID,
USER_ATTR,
QZKD_NUM,
WIFI_NUM,
FTTRC_NUM,
FTTRZ_NUM
)
OPTIONS (skip=n,rows=y,readsize=1048576,bindsize =256000) 其中skip:表示跳过数据中的第n行;rows:每达到y行时进行commit操作;readsize:读取缓冲区大小;bindsize:绑定缓冲区大小.
infile是你要导入的数据文件
CHARACTERSET ZHS16GBK 根据数据库编码加上这一编码格式,不然导入结果乱码
insert :默认方式,在导入记录前要求表为空;
append :在表中追加新导入的记录;
replace :删除旧记录(等价delete from table语句),替换成新导入的记录;
truncate:删除旧记录(等价truncate table语句),替换成新导入的记录;
into table后面指定导入数据库表,且表名必须大写;
FIELDS TERMINATED BY ‘,’ ##加载时每个列的值都以逗号分隔。
OPTIONALLY ENCLOSED BY ‘"’ ##部分字段可以用双引号包含。
执行效率测试:
使用plsql,每200条数据commit提交,导入时间共计 11分钟
使用sqlddr,每200条数据commit提交,导入时间共:2分钟