• LINUX之SHELL进行数据检查和调用存储过程


    #!/bin/sh
    #zlkh.sh
    #增加对数据的校验 张明伟
    nul="/dev/null";
    dt=$(date +"%Y%m%d")
    log=${0##*/};
    tmpfile=/tmp/${log}_$RAMDOM
    log=$HOME/zmw_data/logs/${log%%.*}.log
    
    . $HOME/.bash_profile
    export LANG=zh_CN
    export LC_ALL=zh_CN
    echo >>$log;
    date >>$log;
    
    monstr=${dt:0:6}01
    nxtmss=$(date +"%Y%m%d" -d "$monstr +1 months ") 
    monend=$(date +"%Y%m%d" -d "${nxtmss:0:6}01 -1 days ") 
    maxccnt=100;
    #datadate检查
    filtersql="
    SELECT DISTINCT a.DATADATE
    FROM PLAT_DDDFN a 
    WHERE a.DATADATE BETWEEN $monstr AND $monend
    and a.DATADATE NOT IN (SELECT DISTINCT DATADATE FROM PLAT_ZLKH ) 
    ORDER BY 1
    ";
    
    db2 connect to zxjxdbs>$nul;
    db2 -x "$filtersql" >$tmpfile;
    
    while getopts "s:e:d:" opt
    do
      case "$opt" in 
       "s") strdt=$OPTARG;;
       "e") enddt=$OPTARG;;
       "d") datadate=$OPTARG;;
       "a") autoflg="Y";;
       *) echo "Usage: ${0##*/} [ -s startdate -e enddate] [-d datadate] "
          exit;;
      esac
    done 
    
    #20311230 张明伟 改造成函数
    call_cycle()
    {
        sstrdt=$1;
        senddt=$2;
        while [ $sstrdt -le $senddt ]
        do
          echo strdate is $sstrdt enddate is $senddt | tee -a $log;
          echo db2 -x "call pc_zlkh(?,?,?,?,$sstrdt)";
          d=0
          i=1
          #common exe time is 30 secs
          while [ $d -le 30 -a $i -lt $maxccnt ]
          do
           if [ $i -gt 1 ];then
             sleep 300
           fi
        
           db2 connect to zxjxdbs>$nul;
           date >>$log;
           dts=$(date +"%Y%m%d%H%M%S")
           db2 -x "call pc_zlkh(?,?,?,?,$sstrdt)" >>$log;
           dte=$(date +"%Y%m%d%H%M%S")
           d=$((dte-dts))
           echo db2 -x "call pc_zlkh(?,?,?,?,$sstrdt)" 运行第 $i 次 | tee -a $log;
           echo "pc_zlkh(?,?,?,?,$sstrdt)运行时长为:$((d/3600))小时$((d/60))分$((d%60))秒" | tee -a $log;
           db2 connect reset>$nul;
           db2 terminate>$nul;
           i=$((i+1)) 
          done
        
          sstrdt=$(date -d "$sstrdt +1 days"  +"%Y%m%d")
        done
    }
    
    
    if [ "$strdt" = "" -a "$datadate" = "" ];then
      datadate=$(date -d " -1 days"  +"%Y%m%d")
    fi;
    
    if [ "$strdt" = "" -o "$enddt" = "" ];then
      echo "enddt is null,please input then -s or -e argument"
      strdt=$datadate
      enddt=$datadate
      call_cycle $strdt $enddt
      exit;
    fi;
    
    #检查文件,如果有遗漏数据,进行处理
    if [ -s $tmpfile ]
    then
        while read line
        do
          if [ ${line:0:2} -eq 20 ]
          then 
             call_cycle $line $line;
          fi;
        done<$tmpfile;
        exit;
    fi;
    
    
    rm -f $tmpfile;
  • 相关阅读:
    如何使用angularjs实现文本框设置值
    如何使用angularjs实现文本框获取焦点
    electron的安装
    linux中升级jdk的方法
    linux中添加开机自启服务的方法
    liunx系统安装tomcat的方法
    liunx系统安装jdk的方法
    常用linux命令
    ResourceBundle的使用
    查看Linux系统版本的命令
  • 原文地址:https://www.cnblogs.com/silencemaker/p/12631988.html
Copyright © 2020-2023  润新知