我们都知道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—jlsnumber(2); inumber(2):=1; begin selectcount()intov—jlsfromwzdm; ifmod(v—jls,x)〈〉0then loop exitwheni〉=(x-mod(v—jls,x))+1; insertintowzdm(wzdm,wzmc,xhgg,jldw) values(′′,′′,′′,′′); ii:=i+1; endloop; commit; endif; end;
在报表触发子after report中分别加入以下代码:
begin deletefromwzdmwherewzdmisnull; commit; end;
2.运行报表后即可输出定长的物资代码表。
说明:对于其它tabular风格的报表,在编写上述两个触发子时只需将基表名与列名根据实际情况修改一下,并确定x的值即可。