• LINUX使用SHELL对DB2数据库中的大表中的非月末数据进行分离


    #!/bin/sh
    
    . ./public_s.sh
    
    tdtp="zxjxhisdsspace1";  #tablespace
    titp="zxjxhisidxspace1"; #index tablespace 
    
    tbnm="plat_accinfosh";
    tb=$tbnm"_his";
    getlogname $0;
    log=$pub_result;
    
    [ "$1" != "" ] && tbnm=$1;
    
    pub_datatype="D";
    
    strdate=20130101
    enddate=20130228
    
    [ "$2" != "" ] && strdate=$2;
    [ "$3" != "" ] && enddate=$3;
    
    #获取两日间数据日期
    fc_getdayebtw  $strdate $enddate;
    days="$pub_result";
    
    #获取两月间数据日期
    pub_datatype="M";
    fc_getdayebtw  $strdate $enddate;
    mdays=$pub_result;
    
    
    tbexist="N";
    
    pub_debug="N";
    
    #判断是否存在表
    callchktb()
    {
      chtb=$1;
      
      if [ "$chtb" = "" ]
      then 
        echo "chtb is empty !exit!";
        exit;
      fi;
      
      if [ "$tbexist" = "N" ]
      then
         #检查表是否存在,表的格式为$tbname+his
         
         sql="select count(1) from syscat.tables a where a.tabname=upper('$chtb')";
         echo "sql is [$sql]" | tee -a $log;
         db2cmd "$sql";
         [ "$pub_result" = "1" ] && tbexist="Y";
         
    echo "chtb is $chtb and pub_result [$pub_result] ";
      fi;
    }
    
    #创建表
    callcreate()
    {
        createtsql=" create table $ctbnm like $tbnm in $tdtp index in $titp";
        echo "$createtsql" | tee -a $log;
        db2cmd "$createtsql";
        echo "$pub_result" | tee -a $log;
        echo "$pub_sqlcode" | tee -a $log;
    }
    
    
    #插入函数
    callinsert()
    {
      cdate=$1;
      ctbnm=$2;
      
      if [ "$cdate" = "" -o "$ctbnm" = "" ]
      then
         echo "cdate or ctbnm is empty" | tee -a $log;
         exit;
      fi;
    
      #检查表是否存在,表的格式为$tbname+his
      callchktb $ctbnm;
      #echo "1........"
      if [ "$tbexist" = "N" ]
      then
        callcreate $ctbnm;
        #echo "10........"
      fi;
      callchktb $ctbnm;
      #echo "2........"
      
      if [ "$tbexist" = "Y" ]
      then
      #echo "3........"
        insertsql=" insert into $ctbnm 
                    select * from $tbnm where datadate=$cdate 
                     and not exists ( select 1 from $ctbnm where datadate=$cdate fetch first 1 rows only)
                     with ur";
        echo "$insertsql" | tee -a $log;
        db2cmd "$insertsql" ;
        echo "$pub_result" | tee -a $log;
        echo "$pub_sqlcode" | tee -a $log;
      fi;
      
      detesql="delete from $tbnm where datadate=$cdate and exists ( select 1 from $ctbnm where datadate=$cdate)"
      db2cmd "$detesql";
      echo "$detesql" | tee -a $log;
      echo "$pub_result" | tee -a $log; 
      echo "$pub_sqlcode" | tee -a $log;
    } 
    
    #echo days is [$days]
    #echo mdays is [$mdays]
    #exit;
    for d in $days
    do
      #去除每个月底数据,其他的数据插入到历史表中
      for f2d in $mdays
      do          
        [ "$d" = "$f2d" ] && continue 2;
      done;
      echo callinsert $d $tb;
      callinsert $d $tb;
    done
    db2cmd "runstats on table zxjx.$tb";
  • 相关阅读:
    ansible-palybook剧本
    ansible服务的部署与使用
    keepalived实现nginx高可用
    Linux下通过uptime判断负载情况
    2个无线路由器怎么连接
    Delphi FastReport动态加载图片 (转载)
    SQLite 日期 & 时间
    SuperObject使用
    php int 与 datetime 转换
    sqlserver 2005/2008 导入超大sql文件
  • 原文地址:https://www.cnblogs.com/silencemaker/p/12632010.html
Copyright © 2020-2023  润新知