1

我有多个文件(f1.log、f2.log、f3.log 等)每个文件都有;&=分隔格式的数据。(新行由 分隔;,字段由 分隔=)例如

f1的数据:

1=a;2=b;3=c

f2的数据:

1=p;2=q;3=r

我需要读取所有这些文件并将数据以格式导入表中:

filename  number  data

f1        1       a

f1        2       b

f1        3       c

f2        1       p
[...]

我是 SQL 新手。你能指导我吗,怎么做?

4

1 回答 1

3

使用SQL*Loader将文件放入表中。假设您创建了一个类似于以下内容的表:

create table FLOG
(
  FILENAME   varchar2(1000)
 ,NUM        varchar2(1000)
 ,DATA       varchar2(1000)
);

然后您可以使用以下控制文件:

LOAD DATA
INFILE 'f1.log' "str ';'"
truncate INTO TABLE flog
fields terminated by '=' TRAILING NULLCOLS
(
   filename constant 'f1'
   ,num  char 
   ,data char 
)

但是,您需要为每个文件使用不同的控制文件。这可以通过使用 shell 脚本动态地制作控制文件来完成。示例 shell 脚本可以是:

cat >flog.ctl <<_EOF
LOAD DATA
INFILE '$1.log' "str ';'"
APPEND INTO TABLE flog
fields terminated by '=' TRAILING NULLCOLS
(
filename constant '$1'
,num  char
,data char
)
_EOF

sqlldr <username>/<password>@<instance> control=flog.ctl data=$1.log

保存flog.sh后可以像这样运行:

./flog.sh f1
./flog.sh f2
于 2012-02-02T12:20:04.183 回答