<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-61  評(píng)論-13  文章-19  trackbacks-0

    日志報(bào)表查詢

    最近在做一個(gè)流水表的報(bào)表查詢,做下小結(jié)。

    一般情況下對(duì)于數(shù)據(jù)量比較大的流水日志,都是按月隔接存儲(chǔ)的,所以在生成跨月甚至是跨年報(bào)表的時(shí)候,需要做特殊的處理。以下記錄我的處理方式,供參考。

    思路:

    1、  生成臨時(shí)表:查詢出的數(shù)據(jù)都放在該臨時(shí)表。

    2、  按月查詢:將查詢條件中的開始時(shí)間到結(jié)束時(shí)間之間的數(shù)據(jù)按月依次查詢。

    3、  查詢:(Oracle數(shù)據(jù)庫)

    參數(shù)定義:Start_Date 開始時(shí)間

              End_Date 結(jié)束時(shí)間

              Tmp_Date 當(dāng)前時(shí)間

              Tmp_Data 臨時(shí)數(shù)據(jù)表

              Month_TBName 月表名


    Tmp_Date = Start_Date


    While Tmp_Date < End_Date Loop


        
    Month_TBName =  tuunc(Tmp_Date,’month’)


        Tmp_Date = Add_Months(Tmp_Data,1)    注:
    下次查詢?yōu)橄略卤頂?shù)據(jù)


         If  Tmp_Date > End_Date


       
            
    查詢Month_TBName月表中日期Between Start_Date And End_Date的數(shù)據(jù),放入Tmp_Data 
             

    Else


        
            
    查詢Month_TBName全月表數(shù)據(jù),放入Tmp_Data


     End Loop

      3、 存儲(chǔ)過程
        --SP統(tǒng)計(jì)
        procedure xp_SPStat(areacode    varchar2,
                            songId      varchar2,
                            dateStart   varchar2,
                            dateEnd     varchar2,
                            spID        varchar2,
                            page        number, --之前顯示的頁碼
                            pageSize    number, --頁大小
                            pageAction  varchar2, --翻頁命令:first、last、next、pre
                            total       out number, --記錄總數(shù)
                            currentPage out number, --當(dāng)前頁碼
                            totalPage   out number, --總頁數(shù)
                            ret         out number, --操作結(jié)果
                            rec_rc      out ret_record --結(jié)果集
                            ) is
            tablename varchar2(100);
            sqlstr    varchar2(256) := '';
            num_start number; --個(gè)數(shù)下限
            num_end   number; --個(gè)數(shù)上限
            sqlstry  varchar2(256) := '';
        begin
            if isStatOverSpaned(dateStart, dateEnd) then
                --時(shí)間范圍過大
                ret := ret_err_overspan;
                return;
            end if;
            if statTempTable(areacode,songId,spID,dateStart, dateEnd, tablename) = false then
                ret := ret_err_tmptable;
                return;
            end if;
            --獲取總數(shù)
            select count(*)
              into total
              from (select t.song_id, count(*) as statCount
                      from tsongdeallogtemp t
                    
                     group by t.song_id);
            --翻頁處理
            pageTurn(page, pageSize, total, pageAction, currentPage, totalPage);
            num_start := (currentPage - 1) * pagesize + 1;
            num_end   := currentPage * pagesize;

            --獲取數(shù)據(jù)集
            open rec_rc for
                select *
                  from (select c. *, rownum rn
                          from (select a.statcount,
                               (select count(a.statcount) from (select  count(*) as statcount
                                          from tsongdeallogtemp t)
                               ) FSTATCOUNT, b. *
                                  from (select t.song_id, count(*) as statcount
                                          from tsongdeallogtemp t
                                        
                                         group by t.song_id) a,
                                       tSong b
                                 where a.song_id = b.song_id
                                 order by a.statcount desc) c)
                 where rn between num_start and num_end;
            ret := ret_ok;

        exception
            when others then
                sqlstry :=sqlerrm;
                ret := ret_Failed;
        end;

       --sp統(tǒng)計(jì)臨時(shí)表操作
       function statTempTable(vareacode  varchar2,
                               vsongId    varchar2,
                               vspID      varchar2,
                               vdateStart varchar2,
                               vdateEnd   varchar2,
                               pTabName  out varchar2) return boolean is
            ret       boolean := false;
            tmp_date  date := to_date(vdateStart, 'YYYY-MM-DD');
            v_dateS   date := to_date(vdateStart, 'YYYY-MM-DD');
            v_dateE   date := to_date(vdateEnd, 'YYYY-MM-DD');
            tmpCount  number := 0;
            iCount    number := 0;
            tablename varchar2(100);
            sqlstr    varchar2(516);
            tempSql   varchar2(100);
        begin
            --獲取臨時(shí)表名
            tablename := getSongDealTabName(1);
            pTabName  := tablename;
            sqlstr    := 'delete from ' || tablename;
            execute immediate sqlstr;
        
            --往臨時(shí)表中寫入數(shù)據(jù)
            while tmp_date <= to_date(vdateEnd ||'23:59:59', 'YYYY-MM-DD HH24:MI:SS') loop
                tablename := 'TSONGDEALLOG' ||
                             to_char(trunc(tmp_date, 'month'), 'YYYYMM');
                select count(*)
                  into iCount
                  from tab t
                 where t.tname = tablename;
                if iCount <= 0 then
                    return ret;
                end if;
                tmp_date := add_months(tmp_date, 1);
                tmpCount := tmpCount + 1;
               
                if vsongId is not null then
                  tempSql:=' t.song_id='''||vsongId||''' ';
                else
                  tempSql:=' t.song_id like '''||vspID||'%'' ';
                end if; 
               
               
                if tmp_date >= to_date(vdateEnd||'23:59:59', 'YYYY-MM-DD HH24:MI:SS') then

                    sqlstr := 'insert into tsongdeallogtemp ( select * from ' ||
                              tablename || ' t where '|| tempSql ||
                              ' and t.PHONE_CODE like '''||vareacode||'%'''||
                              ' and t.add_time   between '||
                              'to_date('''||vdateStart|| ' 00:00:00'',''yyyy-mm-dd HH24:MI:SS'')  and ' ||
                              'to_date('''||vdateEnd|| ' 23:59:59'',''yyyy-mm-dd HH24:MI:SS''))';
                    execute immediate sqlstr  ;
                else
                    sqlstr := 'insert into tsongdeallogtemp select * from ' ||
                              tablename || ' t where '|| tempSql ||
                              ' and t.PHONE_CODE like '''||vareacode||'%''';
                    execute immediate sqlstr  ;
                end if;

            end loop;
            commit;
            return true;
        exception
            when others then
            sqlstr:=sqlerrm;
                return false;
                rollback;
        end;

    posted on 2006-03-14 16:10 xnabx 閱讀(478) 評(píng)論(0)  編輯  收藏 所屬分類: 3、DataBase

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 性做久久久久久免费观看| 国产亚洲色视频在线| 麻豆69堂免费视频| 亚洲精品无码MV在线观看| 日韩在线永久免费播放| 亚洲AV永久无码精品网站在线观看 | 国产成人亚洲精品| 亚洲免费日韩无码系列| 最近最新高清免费中文字幕 | 国产成人精品亚洲精品| 3344永久在线观看视频免费首页| 亚洲国产成人久久精品大牛影视| 亚洲日韩中文在线精品第一| 四虎成年永久免费网站| 日韩毛片免费一二三| 亚洲黄色高清视频| 亚洲欧洲日本在线| 国产精品视频免费一区二区| 中国videos性高清免费| 亚洲日韩精品国产3区| 亚洲av丰满熟妇在线播放| 免费h黄肉动漫在线观看| 最近免费视频中文字幕大全| 一级毛片在播放免费| 亚洲sss综合天堂久久久| 日本红怡院亚洲红怡院最新| 免费网站看v片在线香蕉| 久久这里只精品国产免费10| 曰批全过程免费视频观看免费软件| 亚洲欧洲日韩综合| 国产成人A亚洲精V品无码| 色视频色露露永久免费观看| 免费国产在线视频| 亚洲一区二区三区免费| 国产精品亚洲AV三区| 亚洲人成777在线播放| 亚洲四虎永久在线播放| 国产亚洲3p无码一区二区| 亚洲av无码成人精品区在线播放 | 456亚洲人成在线播放网站| 婷婷久久久亚洲欧洲日产国码AV|