Oracle PL-SQL:将多个分隔文件导入表中

时间:2012-02-02 09:54:24

标签: sql oracle parsing plsql delimited

我有多个文件(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新手。你能指导我,怎么办?

1 个答案:

答案 0 :(得分: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