Posted on 2009-10-15 08:45
S.l.e!ep.¢% 阅读(457)
评论(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--
|