Oracle SQL Loader将数据拆分为不同的表

时间:2010-11-05 23:13:42

标签: oracle multiple-tables delimited-text sql-loader

我有一个如下所示的数据文件:

    1            2          3        4             5            6    
FirstName1 | LastName1 | 4224423 | Address1 | PhoneNumber1 | 1/1/1980
FirstName2 | LastName2 | 4008933 | Address1 | PhoneNumber1 | 1/1/1980
FirstName3 | LastName3 | 2344327 | Address1 | PhoneNumber1 | 1/1/1980
FirstName4 | LastName4 | 5998943 | Address1 | PhoneNumber1 | 1/1/1980
FirstName5 | LastName5 | 9854531 | Address1 | PhoneNumber1 | 1/1/1980

我的数据库有2个表,一个用于 PERSON ,另一个用于 ADDRESS ,因此我需要存储列 1,2,3和6 在PERSON中,在ADDRESS中列 4和5 。 SQL Loader文档中提供的所有示例都解决了这种情况,但仅针对固定大小的列,并且我的数据文件是管道分隔的(并且将其分成2个不同的数据文件不是一个选项)。

有人知道怎么做吗?

一如既往的帮助将深受赞赏。

3 个答案:

答案 0 :(得分:3)

另一个选项可能是将文件设置为external table,然后运行插入,从外部表中选择所需的列。

答案 1 :(得分:1)

options(skip=1)
load data
infile "csv file path"
insert into table person
fields terminated by ','
optionally enclosed by '"'
trialling nullcols(1,2,3,6)

insert into table address
fields terminated by ','
optionally enclosed by '"'
trialling nullcols(4,5)

答案 2 :(得分:0)

即使SQLLoader不支持这个(我不确定),也没有什么能阻止你用awk然后加载来预处理它。例如:

cat 1.dat | awk -F '|' '{print $1 $2 $3 $6}' > person.dat
cat 1.dat | awk -F '|' '{print $4 $5}' > address.dat