日志報(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