目的:将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
注意:如果不按照上面的三个步骤做,或者第二步控制文件写的不一样,都会导致一些问题