1. 程式人生 > 實用技巧 >批量檔案匯入資料庫表

批量檔案匯入資料庫表

shell指令碼與sqlldr的結合使用

sqlldr的內容:ctl檔案

OPTIONS(skip=1)   表示跳過檔案中的第一行資料
LOAD DATA
INFILE FILENAME
INSERT/TRUNCATE/REPLACE/APPEND
INTO TABLE TABLENAME
Fields terminated by ","  欄位之間的分隔符
Optionally enclosed by '"'  代表 每個欄位用雙引號框起來
trailing nullcols(
bill_id)

上邊指定了檔名和表名,可以將指定的檔案內容匯入到指定表中

如果有10多個檔案,欄位個數都大致相同,那麼我們如何批量執行呢

將檔名和表名作為變數輸入,重新寫個shell指令碼,呼叫sqlldr即可

指令碼內容如下:

#!/bin/bash
user=****
pass=****
dir=目錄 #先清空臨時表資料
sqlplus $user/${pass}@inaname>oracle.csv <<EOF
truncate table $1;
exit
EOF
echo start sqlldr....
echo for file in `ls $dir/*.txt`
do
echo $file
flag=`echo $file|cut -d \. -f 1|cut -d \/ -f 7`
echo $flag
`cat aaa.ctl|sed "s/FILENAME/'${flag}.txt'/g"|sed "s/TABLENAME/$1/g" > aaa_ext.ctl`
sqlldr $user/${pass}@insname direct=true control=aaa_ext.ctl
#更新表的最後一個欄位為平臺號
sqlplus $user/${pass}@insname>>oracle.csv <<EOF
update $1 set a11='$flag';
exit
EOF
`rm $file`
done

sed命令。將ctl檔案中的filename用迴圈中擷取的內容代替。檔案中的tablename用輸入的變數代替