百度首页 | 百度空间
 
查看文章
 
查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]"


_______________________________________________________________________________

类别:数据库 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码:
 

     

©2008 Baidu