Как сохранить имя файла .dat в таблице с помощью SQL Loader - PullRequest
1 голос
/ 02 декабря 2010

У меня есть сотни файлов данных, которые имеют одинаковую структуру и должны быть загружены в одну таблицу. Однако в таблице есть дополнительный столбец с именем «filename», и я должен хранить имя файла .dat, из которого были загружены данные.

Я знаю, что мог бы создать отдельный контрольный файл для каждого файла .dat, но это трудная задача. Кто-нибудь может предложить лучший способ или как создать контрольные файлы из списка файлов данных?

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

Вероятно, самое простое - использовать один управляющий файл, который не заполняет столбец имени файла, и после загрузки каждого файла использовать SQLPlus для выполнения обновления, например:

UPDATE table SET filename='&1' WHERE filename IS NULL;

Таким образом, каждый новый набор строк загружается со значением NULL для имени файла, затем вы обновляете все строки, имеющие NULL, до текущего имени файла.

0 голосов
/ 03 декабря 2010

Существует фрагмент кода здесь для получения файлов CTL, но это в некоторой степени зависит от вашей ОС.

#!/bin/sh
cd `dirname $0`

file=`ls -rt fullpathofmyfileindir/*.csv | tail -1`
filename=`basename $file`
f=`echo $filename | cut -c 9-16`

cat LOAD_0.CTL > $1.ctl
echo $1
echo 'NOTIF_FILE_DATE "TO_DATE('\'$f\'','\'YYYYMMDD\'')",' >> $1.ctl
echo 'FILE_NAME CONSTANT '$1',' >> $1.ctl
echo 'NOTIF_ID "NOTIF_SEQ.NEXTVAL")' >> $1.ctl
sqlldr migration9c/migration@AXOT01 control=$1.ctl log=$1.log data=$1
rm $1.ctl
...