Posted on 2009-10-15 08:45
S.l.e!ep.¢% 閱讀(465)
評論(0) 編輯 收藏 引用 所屬分類:
DataBase
從Excel文檔導入數據到Oracle里
2008-01-09 11:04
局方提供了一個Excel格式的客戶資料文檔,需要根據這些數據更新當前數據庫客戶信息。轉換過程和用到的腳本記錄一下,供日后參考。
1、首先打開Excel文檔,并另存為“以逗號分隔的CSV文件”后上傳到unix服務器(因為文件內容有些包含空格或tab,所以只能以逗號分隔)
2、寫shell腳本逐行讀取csv文件,并調用sqlplus把數據更新到數據庫,腳本如下: ---------------------------------------------------------------------------------------------------- #!/bin/ksh # V5 to iAD,Encle,2008-1-7 10:44:00
#數據庫配置 ORACLE_SID=ORCL;export ORACLE_SID ORACLE_HOME=/opt/oracle/db01/app/oracle/product/9.2.0 PATH=$ORACLE_HOME/bin:$PATH;export PATH ORACLE_IP=178.19.23.4;export ORACLE_IP ORACLE_PORT=1521;export ORACLE_PORT MBOSS_USR=it;export MBOSS_USR MBOSS_PWD=ti;export MBOSS_PWD CSV_FILE=./test.csv;export CSV_FILE SQL_FILE=./geniad.sql;export SQL_FILE SPOOL_FILE=./geniad.log;export SPOOL_FILE #設置域分隔符為逗號,為讀取csv文件 IFS=,;export IFS
#刪除舊文件 rm $SQL_FILE >> /dev/null rm $SPOOL_FILE >> /dev/null
echo "Begin: `date`"
#循環讀取csv文件,生成對應的sql語句 while read eng_name chn_name account_name dept servicecode address faceplate an2k_port iad_ei iad_portno do ??? if [ -z $servicecode ]; then ??? ??? echo "--Error:servicecode is vacant!" >> $SQL_FILE ??? elif [ -z $iad_ei ]; then ??? ??? echo "--Error:iad_ei is vacant!" >> $SQL_FILE ??? elif [ -z $iad_portno ]; then ??? ??? echo "--Error:iad_portno is vacant!" >> $SQL_FILE ??? else ??? ??? SQL="exec sp_v5('$servicecode','$iad_ei','$iad_ei','$iad_ei','$iad_ei','$iad_portno','$account_name','$eng_name $chn_name','$address'); " ??? ??? echo "$SQL" >> $SQL_FILE ??? fi done < $CSV_FILE
#登陸數據庫執行 sqlplus -S $MBOSS_USR/$MBOSS_PWD@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=$ORACLE_IP)(Port=$ORACLE_PORT))(CONNECT_DATA=(SID=$ORACLE_SID)))>>/dev/null<<END set serveroutput on size 1000000 spool $SPOOL_FILE @$SQL_FILE spool off quit END
echo " End: `date`" ---------------------------------------------------------------------------------------------------- 其中SQL變量可以寫任何能在sqlplus中執行的sql語句或代碼段。
3、執行shell即可。
--End--
|