sqlldr加载excel数据到oracle中,同时序列自增

来源:互联网 发布:uu加速器mac版 编辑:程序博客网 时间:2024/06/03 16:57

目的:将windows下生成的1.xlsx文件导入oracle数据库中的ring表,表中有自增id列

一:先将1.xlsx转换成1.csv格式的excel文件,因为csv默认以逗号分隔列数据,而且使用双引号引起没列数据,很好,字符集不设置也可以正常导入汉字,呵呵,如果直接导入1.xlxs文件,而且设置相关编码,相关分隔符,都是乱码,经过测试,使用fields terminated by whitespace会出现乱码(可能是我字符集没设置好),使用fields terminated by X'09'会出现条数不对和乱码!


二:写控制文件:

vim aa.txt

options (errors=-1)
load data
characterset zhs16gbk                        --如果这里不写编码,那么汉字编码会占用比较多的字节,写了编码会占用比较少的字节数
infile '/tmp/1.csv'
replace into table ring
fields terminated by ',' optionally enclosed by '"'         --如果excel一列中有的值中间有逗号,那么忽略这个逗号,将逗号也导入
trailing nullcols                                                         --这里为解决实际不存在id列而设置的
(
subject_id,
song char(300),
singer,
url char(500),
img_url char(500),
status,
the_order,
cp,
oid,
remark,
id "sqlldr_insert.nextval"--序列自动增加,实际excel中不存在这列,注意此列只能写在最后,不然会导入错误
)

三:导入本地数据库

$  sqlldr control=/tmp/aa.txt log=/tmp/aa.log

四:导入远程数据库也同样适用以上控制文件:

 

$ sqlldr username@t_remote control=/tmp/aa.txt log=/tmp/aa.log


注意:如果不按照上面的三个步骤做,或者第二步控制文件写的不一样,都会导致一些问题

阅读全文
0 0