Oracle PL-SQL: импорт нескольких файлов с разделителями в таблицу - PullRequest
1 голос
/ 02 февраля 2012

У меня есть несколько файлов (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 Ответ

3 голосов
/ 02 февраля 2012

Используйте 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 
)

Однако для каждого файла вам потребуется отдельный файл управления. Это может быть сделано путем динамического создания управляющего файла с использованием сценария оболочки. Пример сценария оболочки может быть:

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
...