从Excel文档导入数据到Oracle里

从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--

你可能感兴趣的:(从Excel文档导入数据到Oracle里)