请教sqlldr把多个格式一样的文件导入到一个表中

shunan 2009-09-01 04:38:07
请教各位大虾,因为要导入的文件名中有日期,所以无法在控制文件中指定多个infile来完成。
是否能在sqlldr命令中完成。如“sqlldr 连接数据库 data= 。。。”。或者其他方法。谢谢了

ps:一个文件一个文件逐个load的方法就免了。
...全文
867 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcs_1 2009-09-08
  • 打赏
  • 举报
回复
我试过了,data参数只能接受一个文件,不能接受多个文件,实在是没办法了.看看用其他方式把文本文件给处理一下,合并成一个文件再用sqlldr
shunan 2009-09-08
  • 打赏
  • 举报
回复
您的意思是写个bat,把我要导入的文本文件合并成一个文件。
然后再用sqlldr进行导入吗?
[Quote=引用 8 楼 feifei19850830 的回复:]
写个批处理将文本合并,然后再按上面的就可以了
[/Quote]
shunan 2009-09-08
  • 打赏
  • 举报
回复
大虾,我前面的回复就说了,我的文本文件名中有日期,如果使用infile的方式,就需要每天动态生成ctl文件,或者手工修改控制文件了。我想有没有办法通过data参数确定,这样日期就可以从批处理bat文件中传进去了。 不知道我说明白了没有。。。

[Quote=引用 7 楼 zcs_1 的回复:]
刚查了下,控制文件中可以指明多个INFILE,如一个控制文件的INFILE部分可以是
INFILE  mydat1.dat  BADFILE  mydat1.bad  DISCARDFILE mydat1.dis
INFILE  mydat2.dat
INFILE  mydat3.dat  DISCARDFILE  mydat3.dis
INFILE  mydat4.dat  DISCARDMAX  10 0

则对于上面的例子,修改如下:
----------------------
名称 字段类型
DEPTNO NUMBER(2)
DNAME VARCHAR2(10)
LOC VARCHAR2(10)

有数据文件df1.txt,内容为
10,Sales,USA
20,Accounting,"Virginia,USA" 
30,Consulting,Virginia 
40,Finance,Virginia

有数据文件df2.txt,内容为
10,Sales,USA
20,Accounting,"Virginia,USA" 
30,Consulting,Virginia 
40,Finance,Virginia

则控制文件ctl.txt的内容为
LOAD DATA
INFILE df1.txt
INFILE df2.txt
INTO TABLE DEPT
APPEND
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(DEPTNO,
DNAME,
LOC)

sqlldr命令为
sqlldr scott/tiger control=ctl.txt
------------------------------------------
[/Quote]
feifei19850830 2009-09-07
  • 打赏
  • 举报
回复
写个批处理将文本合并,然后再按上面的就可以了
zcs_1 2009-09-07
  • 打赏
  • 举报
回复
刚查了下,控制文件中可以指明多个INFILE,如一个控制文件的INFILE部分可以是
INFILE mydat1.dat BADFILE mydat1.bad DISCARDFILE mydat1.dis
INFILE mydat2.dat
INFILE mydat3.dat DISCARDFILE mydat3.dis
INFILE mydat4.dat DISCARDMAX 10 0

则对于上面的例子,修改如下:
----------------------
名称 字段类型
DEPTNO NUMBER(2)
DNAME VARCHAR2(10)
LOC VARCHAR2(10)

有数据文件df1.txt,内容为
10,Sales,USA
20,Accounting,"Virginia,USA"
30,Consulting,Virginia
40,Finance,Virginia

有数据文件df2.txt,内容为
10,Sales,USA
20,Accounting,"Virginia,USA"
30,Consulting,Virginia
40,Finance,Virginia

则控制文件ctl.txt的内容为
LOAD DATA
INFILE df1.txt
INFILE df2.txt
INTO TABLE DEPT
APPEND
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(DEPTNO,
DNAME,
LOC)

sqlldr命令为
sqlldr scott/tiger control=ctl.txt
------------------------------------------
shunan 2009-09-07
  • 打赏
  • 举报
回复
您这个data=df.txt一次只导入一个文件,我想有没有办法data参数关联多个文件,一次进行导入呢? thanks lot

[Quote=引用 5 楼 zcs_1 的回复:]
比如表名为dept,有三个数据项,其字段名称和类型为

名称 字段类型
DEPTNO NUMBER(2)
DNAME VARCHAR2(10)
LOC VARCHAR2(10)

有数据文件,内容为
10,Sales,USA
20,Accounting,"Virginia,USA" 
30,Consulting,Virginia 
40,Finance,Virginia

则控制文件ctl.txt的内容为
LOAD DATA
INTO TABLE DEPT
APPEND
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(DEPTNO,
DNAME,
LOC)

sqlldr命令为
sqlldr scott/tiger control=ctl.txt data=df.txt
[/Quote]
zcs_1 2009-09-04
  • 打赏
  • 举报
回复
比如表名为dept,有三个数据项,其字段名称和类型为

名称 字段类型
DEPTNO NUMBER(2)
DNAME VARCHAR2(10)
LOC VARCHAR2(10)

有数据文件,内容为
10,Sales,USA
20,Accounting,"Virginia,USA"
30,Consulting,Virginia
40,Finance,Virginia

则控制文件ctl.txt的内容为
LOAD DATA
INTO TABLE DEPT
APPEND
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(DEPTNO,
DNAME,
LOC)

sqlldr命令为
sqlldr scott/tiger control=ctl.txt data=df.txt
shunan 2009-09-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zcs_1 的回复:]
可以在控制文件中不指定数据文件名,而是用data参数来指定数据文件,控制文件中把INFILE 部分去掉就可以了。
[/Quote]
大侠,请教用data参数如何写呢? 能否给个例子参考下,谢谢!
zcs_1 2009-09-02
  • 打赏
  • 举报
回复
可以在控制文件中不指定数据文件名,而是用data参数来指定数据文件,控制文件中把INFILE 部分去掉就可以了。
shunan 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 majy 的回复:]
只能在control文件中指定,文件名有日期也没关系啊,你把control file结构发上来看看
[/Quote]
控制文件就是一般很普通的。因为要导入的文件每天有会有,比如说今天是20090902data.txt文件,明天就是要导入20090903data.txt文件了。这样的话,控制文件就得每天动态生成。
majy 2009-09-01
  • 打赏
  • 举报
回复
只能在control文件中指定,文件名有日期也没关系啊,你把control file结构发上来看看

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧