2010-12-02 5 views
1

모든 구조가 동일하며 모두 동일한 테이블에로드해야하는 수백 개의 데이터 파일이 있습니다. 그러나 테이블에 "filename"이라는 추가 열이 있으며 여기에 데이터가로드 된 .dat 파일의 이름을 저장해야합니다.SQL 로더를 사용하여 테이블에 .dat 파일 이름을 저장하는 방법

각 .dat 파일에 대해 별도의 제어 파일을 만들 수 있지만 그럴 필요가 있음을 알고 있습니다. 누구든지 더 나은 방법이나 dat 파일 목록에서 제어 파일을 생성하는 방법을 제안 할 수 있습니까?

답변

1

은 아마 가장 쉬운 방법은 파일 이름 열을 채우지 않습니다 단일 제어 파일을 사용하는 것입니다, 그리고 같은 각 파일 사용 SQLPLUS를로드 한 후 업데이트를 실행 :

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

그래서 각 행의 새로운 집합입니다 filename에 대해 NULL 값이로드 된 다음 NULL이있는 모든 행을 현재 파일 이름으로 업데이트합니다.

+0

로드하기 전에 ALTER TABLE MODIFY COLUMN 파일 이름 DEFAULT 'xxxx'; –

0

CTL 파일을 파생시키기 위해 코드 here이 있지만 그 종류는 OS에 따라 다릅니다.

#!/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/[email protected] control=$1.ctl log=$1.log data=$1 
rm $1.ctl 
관련 문제