查看文章 |
查informix数据库的shell函数及其使用示例
2008-06-14 17:37
自己写的一个查informix的shell函数,需要informix的dbaccess支持. __________________________________________________________________ #!/bin/sh #查数据库的函数selectDB,及其使用示例 nameDB="remotedb" #数据库名 logDir="$HOME/log" #日志文件目录 if [ ! -d "$logDir" ];then mkdir -p $logDir fi logFile="$logDir/selectDB.log" #日志文件名 :>$logFile #清日志 #查数据库的函数 #input:sqlStr #output: dataFile 数据文件名 # 0 -- OK 1 -- ERROR #注意: # 1.需要informix的dbaccess支持 # 2.需要定义外部变量nameDB(数据库名)、logFile(日志文件名)并赋值 # 3.取数据是从文件[dataFile=`selectDB $sqlStr`]读取,一行数据为一条记录,字段以"|"分隔 selectDB() { #检查相关变量有没有值 if [ "$nameDB" = "" ];then echo "<ERROR>数据库名nameDB=[$nameDB]外部变量没有赋值!" exit 1; fi if [ "$logFile" = "" ];then echo "<ERROR>日志文件名logFile=[$logFile]外部变量没有赋值!" exit 1; fi _sqlStr="$*" if [ "$_sqlStr" = "" ];then echo "<ERROR>[$0]没有传入参数SQL查询语句![示例: $0 SQLstring]" exit 1; fi #临时目录 _tmpDir="$HOME/tmp/selectDB" if [ ! -d "$_tmpDir" ];then mkdir -p $_tmpDir fi #将双引号替换成单引号 _sqlStr=`echo $_sqlStr | sed "s/\"/\'/g"` _nowDir="`pwd`" #保存当前路径 cd $_tmpDir _dataFile="data" #取唯一文件名 i=0 _tmpStr="$_dataFile" while [ -f "${_tmpStr}_$$.txt" ] do i=`expr $i + 1` _tmpStr="${_dataFile}$i" done _dataFile="${_tmpStr}_$$.txt" echo "\n\n==================查数据库===================" >> $logFile echo "sqlStr:[$_sqlStr]\ndataFile:[$_dataFile]" >> $logFile echo "unload to $_dataFile $_sqlStr" | dbaccess $nameDB>> $logFile 2>&1 _dataFile="$_tmpDir/$_dataFile" if [ ! -f $_dataFile ];then echo "<ERROR>数据文件[$_dataFile]不存在!" >> $logFile echo "-------------------------------------------" >> $logFile return 1 fi echo " OVER--------------------dbaccess-----------------------OVER" >> $logFile cd $_nowDir echo "$_dataFile" return 0 } #SQL语句 sqlStr="select first 10 unique policyno,classcode from riskcon where classcode like 'EL4%';" dataFile="`selectDB $sqlStr`" if [ $? -ne 0 ];then echo "<ERROR>程序运行出错!请查看日志[$logFile]" exit 1; fi lineNum=`cat $dataFile | wc -l` lineNum=`expr $lineNum` #去空格 echo "查出的数据条数[$lineNum]" #列出数据 i=0 while [ $i -lt $lineNum ] do i=`expr $i + 1` lineData=`sed -n "${i}p" $dataFile` if [ "$lineData" = "" ];then echo "<ERROR>第($i)行数据是空的!" break; fi policyno=`echo $lineData | awk -F"|" '{print $1}'` classcode=`echo $lineData | awk -F"|" '{print $2}'` echo "第[$i]条记录: 保单号=[$policyno],险种=[$classcode]" done echo "<日志>[$logFile]" _______________________________________________________________________________ |
最近读者: