日期:2014-05-16  浏览次数:20480 次

sql loader上传csv文件到Oracle数据库

? sql loader可以把一些以文本格式存放的数据顺利的导入到oracle数据库中,是一种在不同数据库之间进行数据迁移的非常方便而且通用的工具。缺点就速度比较慢,另外对blob等类型的数据就有点麻烦了。

? sqlldr 有两种使用方法:
? 1. 只使用一个控制文件,在这个控制文件中包含数据?
? 2. 使用一个控制文件(作为模板) 和一个数据文件(如.csv文件)

? 以下是第二种使用方法的控制文件简单Demo:

OPTIONS (skip=1,rows=128) -- sqlldr 命令显示的选项可以写到这里边来,skip=1 用来跳过数据中的第一行
LOAD DATA
INFILE "users_data.csv" --指定外部数据文件,可以写多个
--这里还可以使用 BADFILE、DISCARDFILE 来指定坏数据和丢弃数据的文件,
truncate --操作类型,用 truncate table 来清除表中原有记录
INTO TABLE users -- 要插入记录的表
Fields terminated by "," -- 数据中每行记录用 "," 分隔
Optionally enclosed by '"' -- 数据中每个字段用 '"' 框起,比如字段中有 "," 分隔符时
trailing nullcols --表的字段没有对应的值时允许为空
(
virtual_column FILLER, --这是一个虚拟字段,用来跳过由 PL/SQL Developer 生成的第一列序号
user_id number, --字段可以指定类型,否则认为是 CHARACTER 类型, log 文件中有显示
user_name,
login_times,
last_login DATE "YYYY-MM-DD HH24:MI:SS" -- 指定接受日期的格式,相当用 to_date() 函数转换
)

?如上建立名为user.ctl的文件,准备好users_data.csv源数据文件,放在同一文件夹下,再写个批处理文件,即可进行数据到导入。

? 名为user.bat的批处理文件代码如下:

sqlldr userid=scott/anwei@orcl control=user.ctl data=user_data.cvs  log=user.log

?执行完 sqlldr 后希望能留意一下生成的几个文件,如 users.log 日志文件、users.bad 坏数据文件等。特别是要看看日志文件,从中可让你更好的理解 Sql Loader,里面有对控制文件的解析、列出每个字段的类型、加载记录的统计、出错原因等信息。

?