我們都知道Oracle reports是Oracle的數據統計和圖形化報表的工具,Oracle reports提供了六種不同風格的報表格式,但是我們經常使用的兩種,就是tabular與matrix,以下的文章就有相關的介紹。
無論用哪種風格生成的報表,打印出的表格數都是動態變化的。其中tabular風格的報表,列數固定,而行數不定;matrix風格的報表,行數和列數均不定。那麼在Oracle reports中如何實現報表的定長與定寬輸出呢?筆者在實際開發過程中對上述兩種風格的報表各總結出一種行之有效的方法,供大家參考。
對於tabular風格的報表,可用報表觸發子after parameter form和after report實現定長輸出。其方法是:根據實際情況確定每頁打印的行數,當最後一頁的記錄數少於每頁打印的行數時,則用空記錄補齊。在觸發子after parameter form插入空記錄,在觸發子after report中再將空記錄刪除,下面舉例說明。
假設有一數據基表wzdm:存放物資代碼信息,其數據結構為:
字段名 含義 長度 類型
wzdm 物資代碼 9 c
wzmc 物資名稱 20 c
xhgg 型號規格 20 c
jldw 計量單位 6 c
要求:按定長輸出物資代碼表,並且每頁均輸出x行(x可根據實際情況而定)。
1.啟動Oracle reports,建立物資代碼打印報表(略),然後在報表觸發子after parameter form中加入以下代碼:
- declare
- v—jls number(2);
- i number(2):=1;
- begin
- select count() into v—jls from wzdm;
- if mod(v—jls,x)〈〉0 then
- loop
- exit when i〉=(x-mod(v—jls,x))+1;
- insert into wzdm(wzdm,wzmc,xhgg,jldw)
- values(′′,′′,′′,′′);
- ii:=i+1;
- end loop;
- commit;
- end if;
- end;
在報表觸發子after report中分別加入以下代碼:
- begin
- delete from wzdm where wzdm is null;
- commit;
- end;
2.運行報表後即可輸出定長的物資代碼表。
說明:對於其它tabular風格的報表,在編寫上述兩個觸發子時只需將基表名與列名根據實際情況修改一下,並確定x的值即可。