现学现卖之sqlldr导入

     今天看了篇博客,http://blog.csdn.net/jccg1000196340/article/details/19162553,介绍使用sqlldr导入数据到oracle,这个命令没用过,今天第一次用,自己测试成功了,写篇博文纪念下。

     首先,带上参考的博文连接:

    

http://www.cnblogs.com/flish/archive/2010/05/31/1748221.html

    注意,sqlldr是cmd命令行下的,不要试图在pl/sql下使用,我第一次也是在pl/sql下使用,结果如下:

   

    开始我以为是登录的用户没权限,使用sysdba登录结果也一样,正确的方式是,打开cmd命令行,敲入sqlldr;结果为:

   

    可以看到,各个参数都有详细的介绍,我就不一一介绍了,下面介绍具体的实例:

    首先新建一个测试表:

   

create table test_sqlldr_users(
    user_id number,           --用户 ID
    user_name varchar2(50),   --用户名
    login_times number,       --登陆次数
    last_login date           --最后登录日期
);

    插入测试数据:

   

insert into test_sqlldr_users values(1,'中文测试',3,sysdate);
insert into test_sqlldr_users values(2,NULL,5,to_date('2014-02-15','YYYY-MM-DD'));
insert into test_sqlldr_users values(3,'隔叶黄莺',8,to_date('2014-02-02','YYYY-MM-DD'));
insert into test_sqlldr_users values(4,'秋风落叶',NULL,NULL);
insert into test_sqlldr_users values(5,'秋叶',1,to_date('2014-02-23','YYYY-MM-DD'));
insert into test_sqlldr_users values(6,'测试中文',3,to_date('2014-02-13','YYYY-MM-DD'));
insert into test_sqlldr_users values(7,'秋风落叶',NULL,sysdate);

    使用pl/sql导出测试数据到cvs文件。

    新建控制文件test_sqlldr_users.ctl:

   

OPTIONS (skip=1,rows=128)--sqlldr 命令显示的选项可以写到这里边来,skip=1 用来跳过数据中的第一行
LOAD DATA
INFILE "test_sqlldr_users_data.csv" 
truncate--操作类型,用 truncate table 来清除表中原有记录
INTO TABLE test_sqlldr_users 
Fields terminated by "," -- 数据中每行记录用 "," 分隔
Optionally enclosed by '"' -- 数据中每个字段用 '"' 框起,比如字段中有 "," 分隔符时
trailing nullcols --表的字段没有对应的值时允许为空
(
  user_id,
  user_name, 
  login_times,
  last_login DATE "YYYY-MM-DD HH24:MI:SS"
)

   相信各位可以一眼看出上面的含义,这里说明下,在操作类型位置,可以使用以下值:

   

1) insert     --为缺省方式,在数据装载开始时要求表为空
2) append  --在表中追加新记录
3) replace  --删除旧记录(用 delete from table 语句),替换成新装载的记录
4) truncate --删除旧记录(用 truncate table 语句),替换成新装载的记录

    这里啰嗦下,操作类型使用insert,表要为空,否则报错,如下:

   

    操作类型如使用replace,会将表清空,各位不要以为是只替换存在的值,使用它记得先备份数据,否则,数据这剩下插入的新值了。

  

     在cmd命令行下敲入sqlldr命令,导入数据:

    

sqlldr tmd/tmd@xe control=test_sqlldr_users.ctl log=f:/saveFile/tmp/sqlldr.log bad =f:/saveFile/tmp/sqlldr.log

    记得把log参数带上,有时候,窗口显示达到提交点 - 逻辑记录计数*,但是数据库就是没数据,这时候可能是导入时候某个值出现错误导致插入不成功,下图是我测试成功时的截图。

   

    日志文件如下:

    

     最后我要强调下,我第一次导入时候发现数据库中文里面全部是乱码,我数据库是utf-8编码的,cmd下是系统默认编码gbk,所以就猜想导入时候也是采用了默认编码gbk,导致乱码,解决办法是,把数据文件改成gbk编码的,在导入就OK了。

     现学现卖,让各位见笑了。

    全文完。

猜你喜欢

转载自53873039oycg.iteye.com/blog/2017729