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

Sql-Loader实现excel数据导入oracle相关问题
我想把excel数据导入oracle中,oracle服务器是AIX系统
1.首先利用pl/sql在oracle数据库中创建了表
create table tantest
(
  aid          VARCHAR2(20) not null,
  aname        VARCHAR2(20),
  adept        VARCHAR2(50),
  apost        VARCHAR2(50),
  aworkday     VARCHAR2(10),
  aweek        VARCHAR2(10),
  amonth       VARCHAR2(10),
  atotal       VARCHAR2(10),
  amlevel      VARCHAR2(10),
  amnum        VARCHAR2(10),
  anlevel      VARCHAR2(10),
  annum        VARCHAR2(10),
  afinaltotal  VARCHAR2(10),
  afinaltotalb VARCHAR2(10),
  afinaltotalc VARCHAR2(10)
)
2.然后新建excel文件,内容如下:

然后将该excel文件另存为tantest.csv
3.创建input.ctl文件,内容为
load data
infile '/tantest.csv'
append into table HR_ASSESS fields terminated by ','
trailing nullcols
(aid,aname,adept,apost,aworkday,aweek,amonth,atotal,amlevel,amnum,anlevel,annum,afinaltotal,afinaltotalb,afinaltotalc)

4.然后在我电脑(win7系统)命令行下输入命令:sqlldr userid=user1/password@netservice control=input.ctl

问题:tantest.csv和input.ctl这两个文件要上传至oracle服务器,请问要传到哪个目录下,该命令才能正常执行,oracle服务器是AIX系统

------解决方案--------------------
不管这两个文件传到哪个目录下,
命令行下输入命令:sqlldr userid=user1/password@netservice control=控制文件的全路径,
另外,控制文件中的数据文件路径  infile '/tantest.csv' 也应是指到对应的数据文件全路径
------解决方案--------------------
放到服务器目录不对吧,这个应该是放到本地的,就像imp一样,是客户端命令
------解决方案--------------------
1、你连接服务器是通过windows的客户端连接的,所以你是通过客户端导数据,因为有两个问题你要注意:
   A、你必须要有权限导数据
   B、你再导入数据的时候,在客户端执行的时候,你默认的目录是在哪里,你的对应文件就要放在那里,否则,你的文件就要制定存放路径来执行如: “D:\XXXXXX.ctl”
------解决方案--------------------
引用:
这命令只能在服务器上运行?

我已经连接至服务器了,sqlldr userid=username/password@netservice

可以在客户端或者服务器运行,在哪里运行,ctl文件跟你的csv文件就要放到哪里
------解决方案--------------------
嗯,这个命令可以在任何地方,如果在服务器上,可以去掉netservice名。还有,路径最好用全路径名。
------解决方案--------------------
默认你的数据库用户有导入权限,且从你的本地(win7系统)能连接数据库。
  假设:
  A.要导入数据文件位置:D:\tantest.csv
  B.控制文件位置:D:\input.ctl
则1.控制文件input.ctl内容应该如下:
load data
infile 'D:\tantest.csv'
append into table HR_ASSESS fields terminated by ','
trailing nullcols
(aid,aname,adept,apost,aworkday,aweek,amonth,atotal,amlevel,amnum,anlevel,annum,afinaltotal,afinaltotalb,afinaltotalc)

2.命令行下输入命令:sqlldr userid=user1/password@netservice control=D:\input.ctl