- 相關(guān)推薦
oracle reports實(shí)現報表定長(cháng)與定寬輸出
oracle reports是oracle的數據統計及圖形化報表工具,它提供了六種風(fēng)格的報表格式,而我們通常使用的只有其中的兩種,即tabular和matrix,無(wú)論用哪種風(fēng)格生成的報表,打印出的表格數都是動(dòng)態(tài)變化的。其中tabular風(fēng)格的報表,列數固定,而行數不定;matrix風(fēng)格的報表,行數和列數均不定。那么在oracle reports中如何實(shí)現報表的定長(cháng)與定寬輸出呢?
一、對于tabular風(fēng)格的報表,可用報表觸發(fā)子after parameter form和after report實(shí)現定長(cháng)輸出。其方法是:根據實(shí)際情況確定每頁(yè)打印的行數,當最后一頁(yè)的記錄數少于每頁(yè)打印的行數時(shí),則用空記錄補齊。在觸發(fā)子after parameter form插入空記錄,在觸發(fā)子after report中再將空記錄刪除,下面舉例說(shuō)明。
假設有一數據基表wzdm:存放物資代碼信息,其數據結構為:
字段名 | 含義 | 長(cháng)度 | 類(lèi)型 |
wzdm | 物資代碼 | 9 | c |
wzmc | 物資名稱(chēng) | 20 | c |
xhgg | 型號規格 | 20 | c |
jldw | 計量單位 | 6 | c |
要求:按定長(cháng)輸出物資代碼表,并且每頁(yè)均輸出x行(x可根據實(shí)際情況而定)。
1.啟動(dòng)oracle*reports,建立物資代碼打印報表(略),然后在報表觸發(fā)子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(′′,′′,′′,′′);
i:=i+1;
end loop;
commit;
end if;
end;
在報表觸發(fā)子after report中分別加入以下代碼:
begin
delete from wzdm where wzdm is null;
commit;
end;
2.運行報表后即可輸出定長(cháng)的物資代碼表。
說(shuō)明:對于其它tabular風(fēng)格的報表,在編寫(xiě)上述兩個(gè)觸發(fā)子時(shí)只需將基表名與列名根據實(shí)際情況修改一下,并確定x的值即可。
二、對于matrix風(fēng)格的報表,可利用視圖實(shí)現定長(cháng)與定寬輸出,其思路是:當行記錄數和列記錄少于實(shí)際報表的行數和列數時(shí),均以空記錄補齊。下面舉例說(shuō)明。
假設有一物資資金消耗去向統計月報,該表橫向顯示本期消耗去向,縱向顯示物資類(lèi)別,由于每月物資消耗去向和消耗物資均不定,所以此類(lèi)報表即為一矩陣報表。該報表的數據存放在基表t—zjxhqx中,其數據結構如下:
字段名 | 含義 | 長(cháng)度 | 類(lèi)型 |
lbmc | 類(lèi)別名稱(chēng) | 20 | c |
dwmc | 單位名稱(chēng) | 20 | c |
je | 金額 | 14,2 | n |
要求:按定長(cháng)定寬輸出物資資金消耗去向統計月報,并且每頁(yè)均輸出x行y列(行數和列數可根據實(shí)際情況而定)。
1.首先建一基表t—kjl,用來(lái)存放空記錄,其數據結構為:
字段名 | 含義 | 長(cháng)度 | 類(lèi)型 |
no | 序號 | 2 | n |
建完該數據表后,再往其中插入記錄,記錄數可根據實(shí)際情況而定,一般為一頁(yè)所能打印的最大行數,這里假設為z條,即no的值為1,2,3…z。
2.建視圖,其過(guò)程如下:
create view v—tjbb as
select dwmc,lbmc,je from t—zjxhqx
union
select dwmc,null,to—number(null) from t—zjxhqx,t—kjl
where no-(z-x)〉(select mod(count(distinct lbmc)-1,x)+1 from t—zjxhqx)
union
select null,lbmc,to—number(null) from t—zjxhqx,t—kjl
where no-(z-y)〉(select mod(count(distinct dwmc)-1,y)+1 from t—zjxhqx);
3. 啟動(dòng)oracle*reports,建立矩陣報表查詢(xún)時(shí)直接引用視圖v—tjbb即可。這樣運行時(shí)輸出的報表每頁(yè)都是x行y列,即實(shí)現了定長(cháng)和定寬輸出。
【oracle reports實(shí)現報表定長(cháng)與定寬輸出】相關(guān)文章:
Oracle認證:ORACLE綁定變量BINDPEEKING08-25
Oracle認證:Oracle內存結構研究-PGA篇09-22
oracle的sql語(yǔ)句01-21
Oracle認證作用07-31
Oracle最新認證07-13
Oracle認證簡(jiǎn)介11-30
Oracle認證途徑09-11