使用sqlldr把Excel导入Oracle数据库我总结为三个步骤:
1.在Oracle数据库创建对应要导入数据的表,以及涉及到的列。
2.在控制文件中,写入相关内容。
3.Win+R打开命令行窗口,执行sqlldr命令。
当导入的数据不是很大时,如下所示:
1.(已存为csv文件),如下:
2.控制文件:
load data
infile 'e:\test.csv'
append into table test_order fields terminated by ','
trailing nullcols(
product_id, user_name ,phone_num, address ,order_date ,delivery_date)
注意:当控制文件中的列不定义类型及大小时默认为char(255)
3.Win+R打开命令行窗口,执行命令。
查看Oracle数据库的内容:
csv实际数据7条,但实际插入数据6条,原因分析:
查看报错日志:
这里报错是因为在Oracle数据库建表时,各列的数据类型都不一样,而在控制文件里面把各列都默认为char类型的,当使用sqlldr导入数据时,会自动把控制文件的类型转换为与Oracle对应的数据类型,而在导入的scv文件的第一行,在控制文件重为char类型,在Oracle对应的可能为date类型,因不能成转换,所以报错。
解决办法:1.在Oracle数据库把所有的列东定义为varchar2类型。
2.把csv文件的第一行删了。
当导入的数据,某一列对应的内容太大
该列超过了默认的255,则可以在其列后定义类型及大小,如下:(csv文件加入一行,Oracle对应增加一列)
Oracle:alter table test_order add introduction varchar2(600);
控制文件:
load data
infile 'e:\test.csv'
append into table test_order fields terminated by ','
trailing nullcols(
product_id, user_name ,phone_num, address ,order_date ,delivery_date,introduction)
报错如下:
记录 4: 被拒绝 - 表 TEST_ORDER 的列 INTRODUCTION 出现错误。
数据文件的字段超出最大长度
更改控制文件:
load data
infile 'e:\test.csv'
append into table test_order fields terminated by ','
trailing nullcols(
product_id, user_name ,phone_num, address ,order_date ,delivery_date,introduction char(666))
运行结果:
查看表:
对控制文件中的append,insert,replace的说明:
append:在表里追加内容,表可以不为空。
insert:在表里插入数据,表要为空,否则报错。
replace:把表里的覆盖,类似overwrite,表不为空,也不会报错。
即:控制文件
load data
infile 'e:\test.csv'
append/insert/replace into table test_order fields terminated by ','
trailing nullcols(
product_id, user_name ,phone_num, address ,order_date ,delivery_date,introduction char(666))
三种情况分别截图如下:
append:在表里追加内容,表可以不为空。
insert:在表里插入数据,表要为空,否则报错。
replace:把表里的覆盖,类似overwrite,表不为空,也不会报错。
想要获取关于更多sqlldr的知识,敬请期待。