批量檔案匯入資料庫表
阿新 • • 發佈:2020-09-10
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/bashuser=****
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`
#更新表的最後一個欄位為平臺號
sqlplus $user/${pass}@insname>>oracle.csv <<EOF
update $1 set a11='$flag';
exit
EOF
`rm $file`
done
sed命令。將ctl檔案中的filename用迴圈中擷取的內容代替。檔案中的tablename用輸入的變數代替