Oracle[转]TEC1401.Report开发技术总结 – 第三节 使用Oracle Reports开发报表-创建一个分组报表(2/4)

本文转自:http://blog.csdn.net/deepsea_allen/article/details/53900284

 

其三回   创建一个分组报表

1.     建立数据模型

数据模型用于定义一个表中采取的数量和数据结构,这些多少可以是数据库表中的故数据,也可以是透过加工后底数码,如工资的总和相当。从数据库中查找出的多少是否当表格输出中显得,也是以数据模型中定义的。

数据模型由五有些靶成:查询(Queries)、组(Groups)、列(Columns)、连接(Links)和参数(Parameter)。

1)     建查询

询问实际上就是是一模一样漫漫SQL
SELECT语句,决定了打数据库中指定的表明或视图中得哪行和列。查询所获取的数码而给用于计算、排序、集合运算等,并得以于表格输出时显得。

Ø 报表被的查询而分为两栽:内部查询与表面查询。两者的区分在于标查询好被外报表多次引用,而里边查询不可知让别报表参考引用,只能吃其所属的表格引用。

Ø 根据报表被查询的个数可以用报表分为单查询报表与多询问表。

止查询表:只有一个询问的报表称为单查询报表。单查询表的常见格式有列表式(Tabular)、标签式(Mailing
Label)、信封式(Form
Letter)以及分组式。单查询表虽然光生一个询问,但好屡屡来得查询数据,并且可以为此不同之格式显示。

大多询问表:含有多独查询的报表称为多询问表。多个查询相互之单可以有关统一,称为相关的多询问表;也可无涉及,称为不相干的大半询问表。

l  相关的大多询问表:多单查询之间相互关联,一般用来主从式报表,也就是说,报表的平有的数据控制了表的任何一样有数据。取出前有些多少的查询称为主查询,取出后同样片的查询称从询问,主查询的各一样条记下查询都以引起起询问的施行,从询问才摸和主查询匹配的那些记录。两独查询之间通过定义数据连接有联系。

l  不相干的多询问表:多个查询之间无干,Oracle
Reports将独立地吧每一个查询获取数据,显示出来的是千篇一律文山会海不相干的数目。

查询之间运行的次第顺序由数据模型中之询问次序决定。在数据模型中,查询次序是优先上后下,先左后右,所以在左上角的查询最先执行。

演示:为免数据冗余,我们这边将商定单头和实践分别建立两单查询:

a)     在对象管理器中当选报表,右击打开“报表编辑器”,然后点击打开“数据模型”。

 

b)     点击SQL查询创建两只查询。

 

c)     修改Q1->Q_header,G_order_number->G_header;

    Q2->Q_line,G_line_num->G_line

2)     树立数量连接

数码连接用于建两单查询数据里的关联。在数据模型编辑器中,两独查询之间的连线即意味着了一个多少连接。

办事规律:数据连接通过主键和外部键定义了区区个查询之间的主/从涉嫌。主/从涉嫌蒙父亲查询的各国一样长长的记下的出都见面引起子查询的执行,子查询才找满足于接连着指定的原则的记录。

常见状态下,两单查询之间的连日是等值连接,但也可以动用SQL语句(如WHERE、HAVING、START
WITH等)建立非等值连接。

当一个含有数据连接的表格执行时,该多少连接就让转移成一个SQL子句,并丰富到子查询的末尾。子查询根据父查询的主链值执行查询。

树艺术:一种植是手动建立的数量连接,一种是机动建立之数连接。

手动连接的手续:在数据模型编辑器中精选:“数据连接”小图标;

单击父查询的主链列或外部键列,并拖动鼠标到子查询的主链或外部键列,使她中间成立平等长长的连线。注意,连线总是打翁查询到子查询的;

活动连接的步骤:在数据模型编辑器中摘:“数据连接”小图标;

单击父查询,并拖延动鼠标到子查询及,系统会自动显示大查询和子查询之间是因哪个列建立连接的;

       示例:点击数据连接,创建从Q_header
(header_id)到Q_line(header_id1)的多少连接。

 

3)     建立组

组对象要出一定量独力量:

Ø 将一个查询的数分为几只聚众,每个集合称为组。例如,将“EMP”表按“DEPTNO”分组,结果显示如下:

 

Ø 过滤查询数据,通过组可针对查询的结果进行过滤。

于Oracle Reports中将组分为少省组和用户定义组两近似:

Ø 以紧缺省的事态下,Oracle
Reports为数据模型中之每一个查询有一个组,取名取成查询的号。查询称为“Q_”开头,而组名以“G_”开头。例如,查询称为“Q_header”,则Oracle
Reports为其来的缺省组名为“Q_header”。

Ø 用户定义组可用于以下三种情况:分组报表;矩阵报表;子汇总。

组过滤器允许发生格的选择由询问检索出来的数,通过组过滤器过滤查询结果。

起半点种档次的组过滤器:Oracle Reports封装过滤器和用户定义过滤器。

Ø Oracle
Reports封装过滤器允许指定在一个组中希望物色的记录数,在表开发进程中得应用封装过滤器来限制数量。Oracle
Reports软件包中生出个别个包过滤器:First Filter,只显示组内前n条记下;Last
Filter,只展示组内后n久记下。

Ø 用户定义过滤器:用户可定义自己的过滤器来限制在特定条件下之笔录之寻找。用户定义的过滤器是经过编制PL/SQL代码建立之。

 

数据模型中组的层系决定了当缺少省布局对话框中组的顺序,同时也决定了在缺乏省布局中组的先后,但这不是终极的表格式,因为可以针对少省之显得格式进行改动。

以数据模型编辑器中如果无数据连接,则组的层次是由于组在数据模型编辑器中之位置于左到右,从达及下决定的。在数据模型编辑器中要有多少连接,则组的层系可以由数据连接描述。通过对象导航器可以清晰地观看组的层系:

 

4)     定义列

报表的排表示报表的数目。在概念了于数据库检索数据的询问后,可能需要更加调动报表,增加又多之排,而这些列好为此作报表的数据,执行一起汇总等效果。

Oracle Reports中之排好分为两近乎,缺省列和用户定义列。

Ø 缺省列

Oracle
Reports为查询SELECT语句被之每一样宗都成立一个排,因为其一直对承诺打数据库中检索出来的依次列,所以缺少省列也吃数据库列。

Oracle
Reports除了支持典型的数据类型的排(如字符型、数值型、日期型)以外,还支持图型列。图型列的值可能是:

直白存储于数据库中之图型:这种列的数据类型通常是RAW或LONG
RAW。在这种情形下,需于排的性能选项板中指明图形格式。

文本名或者是图型的URL:这种列的数据类型通常是REF,列被之值对承诺于用指针指向一个留存操作系统被的文本,报表输出时会见因指针将文件内容输出,在这种情景下,需在排列的属性选项板中将“Read
from
File”设置为“Yes”并输入文件称。文件名前可以蕴涵路径,若文件名前尚未包含路径,则Oracle
Reports会按照其路径搜索顺序查找文件。可以通过Report
Builder的环境变量REPORT30_PATH来设置搜索路径。注意,若列的性质选项板中“Read
from
File”被置为“No”并且输入了文件称,则报表最后输出的唯有会是文本称,而未见面是文件内容。

Oracle
Reports支持多图格式,包括BMP、CALS、CGM、GIF、JFIF、PCD、PCX、PICT、RAS、TIFF等。

Ø 用户定义列

用户可于特定的组内或报表一级建立列。在一定的组内建立之列称为组一级的排列,该列与组内的任何列有同样之展示频度。而报表一级的排列只以合表格中显得平不好。用户定义列分为三种植类型:公式列、占位列和聚合总列。

a)     公式列,公式列是针对性另列执行一个用户定义之计。建立公式列的点子是用PL/SQL语句写一个函数,从一个要多单列被计算结果,该列的缺省称作也“CF_n”。

示例:在G_line组中定义一个之公式列newAmount,来显示Amount *1.06的值。

在数据模型编辑器中单击:“公式列”小图标。如果要以组吃修一个公式列,则在画布的组区域外单击一下鼠标左键,如果只要建一个表一级的公式列,则当画布的空域区域外单击一下鼠标左键,会扭转一个公式列对象;

 

 

双击该公式列对象,弹出其属性选项板;

点击属性选项板中的“PL/SQL公式”项,弹出“程序单元编辑器”;

 

 

于“程序单元编辑器”中呢公式项用PL/SQL语句书写一个计算公式并编译通过。

 

 

b)     占位列,占位排列的值和数据类型是经过PL/SQL语句设置的,该列的缺省称作也“CP_n”。当需要发出选择地安装一个排的价时(例如,在历次出现第n单记录时,或每次出现包含有特殊值的笔录时)占位列非常实惠。

得以偏下几个地方设置占个排列的值:

每当Before Reports的表触发器中(如果占位列是一个报表级的排);

于报表级的公式列中(如果占位列是一个回报表级的排列);

每当占位列组或占位列组下面的公式中(为组被之各一样漫长记下设同一次值)。

占用各项排列的用处:

每当公式列的PL/SQL代码中计算出的片段价值好分配为不同之占位列;

使用占位列保存中间值。例如,存储时搜出的最高工资对应的记录。

c)     汇总列,汇总列是对其余列的多寡实行计算。Oracle
Reports为集聚总列提供的测算函数有:总和、平均值、最小值、最要命价值、计数、第一独、最后一个、%(总计)、标准不一、方差。

示例:在G_header组中补充加CS_countAmount,来计量订单行之究竟金额;

         在Report级别添加CS_total,来测算订单的总数量;

于数据模型编辑器中单击“汇总列”小图标,如果一旦在组被确立一个集结总列,则于组中公要该列所于的职位及单击一下鼠标左键,如果要是构筑一个报表一级的联谊总列,则于画布的空区域外单击一下鼠标左键,会变动一个聚众总列;

 

双击该汇总列对象,弹出其属性选项板;

自属于性选项板中之“汇总”项下的“功能”子项的下拉列表中选择所用的计算公式;在“源”子项中选取要集中的列名;

以“重设于”子项中精选集中的频度,即是就满表格做同赖集中还是各个一样页做同样潮集中,或者各级一样组做一样不好集中;

当“功能”子项被选为“%(总计)”时,“计算为”项有因此,其值为计“%(总计)”的汇聚总列时的组名。该项只对“%(总计)”有用。

 

5)     参数

参数是报表变量,在表格运行过程中,用户可为夫指定不同之值。参数主要用于在运转过程中改SELECT语句和设置PL/SQL变量。Oracle
Reports中的参数分为两像样:系统参数与用户参数。

Ø 系统参数

系统参数又称缺省参数。Oracle
Reports允许吗每一个表格修改标准的运转设置,系统参数共发生7单。

 

系统参数

功能

取值

省缺值

COPIES

报表输出到打印机的份数

任何整数

1

DESFORMAT

输出设备的格式,如:打印机

Dflt、Pslan80

Dflt

DESNAME

输出设备的名字,如:文件名、打印机名

 

 

DESTYPE

输出结果送到什么地方,如屏幕、文件、邮件、打印机等

File、Mail、Screen、Printer

Screen

MODE

报表运行的模式,如:字符界面、图形界面等

Bitmap、Character

Default

ORIENTATION

打印报表输出时的打印方向,如:Landscape、Portrait

Landscape、Portrait

Landscape、Portrait

PRINTJOB

当运行一个报表时是否显示“PRINT JOB”对话框

YES、NO

YES

Ø 用户参数

用户参数是用户建立的一个对象,该目标用于保存于运行时用户可以转移的值。在一个询问的另外地方都得引用用户的参数,用户参数主要用以以下几只地方:

l  在SELECT语名的WHERE子句中用参数替代常数作限制值。

l  用参数替代SELECT语句之其它有,包括精选列、表,甚至整个SELECT语句。

l  以SELECT列表中用参数替换一个单列或一个表达式。

援参数的计要出一定量栽:连接引用和置换引用。

a)     连接引用

接连引用主要用以替换SQL语句和PL/SQL块被的一个价值或表达式。

使用连接引用的办法是于如引用的参数前增长“:”号。

总是引用的施用被以下限制:不克于SELECT语句被替换列名;不可知当FROM从句被采取连接引用;不能够替保留的单词和子句。

         示例:将查询Q_header的where条件中描绘好的准:

         oh.order_numberbetween 29480and29485

修改为:oh.order_numberbetween:p_order_fromand:p_order_to

         保存修改后,Oracle Report会自动进入这点儿单用户参数。

 

b)     置换引用

换成引用得就此参数替代SELECT语句的旁部分,如替换列名、FROM子句、WHERE子句、GROUP
BY子句、ORDER BY子句、HAVING子句、CONNECT BY子句、START WITH子句等。

行使置换引用的章程是在苟引用的参数前增长“&”符号。

专注:不能够当PL/SQL中行使置换引用,但足以以PL/SQL中动用连接引用。

及连续引用不同之是,对于置换引用的参数,用户必须先在对象导航器中成立,并且于属性选项板中为其输入初始化值,Oracle
Reports不会见少省地确立拖欠参数。

比方:使用置换引用替代列名和FROM子句。

SELECT &P_ENAME NAME, &P_EMPNO ENO

FROM &P_EMP;

这般可以动态地因运行时输入的参数值,决定从哪个表检索那些列。

以置换引用替换WHERE子句

SELECT * FROM EMP &P_WHERE;

于运作时可轻易指定WHERE子句,根据不同的克标准检索所要数。

值列表,为参数值建立值列表,这样,在运行时用户就得于该值列表中挑选一个有效值。可以限制用户只能挑值列表中之价,也足以允许用户输入外的值。

于连续引用的参数,值列表可以是一个不能够修改的静态的值列表,也得以是当运作时由数据库中动态地挑值的动态值列表。

对置换引用的参数,值列表只能是静态的。

2.     设计布局

布局的职能是概念报表的格式,包括数据文本以及图片的位置和展示格式。

每当布局模型编辑器中将报表布局分为三只区域:表头区域、表尾区域和核心区域,每个区域还要分为核心和页边距。

Ø 表头区域 在报表每一样页的开显示平不成,表头区域可以涵盖文本、图形、数据及其运算。

Ø 表尾区域 在表格每一样页的结尾处显示同一破,表尾区域可以蕴涵文本、图形、数据与演算。

Ø 主体区域 出现于表头和表尾之间,是报表的要组成部分。当第一不善登一个初报表的布局模型编辑窗口时,所处之职位就对准承诺正在报表的主脑区域。主体区域包含报表的严重性文件、图形、数据及其运算。

着力布局对象:

当布局模型编辑器中,是透过定义跟改动布局对象来促成的,Oracle
Reports中之基本布局对象来框架(Frames)、重复框架(Repeating
Frames)、域(Fields)、图文(Boilerplate)、定位(Anchors)、按钮(Buttons)、OLE2对象、Oracle
Graphics对象。

1)     框架

框架用来围绕其它布局对象。一个框架可以分包其他布局对象,包括外的框架。框架的打印次数和它所围的目标的打印次数一样,框架和记录无关。

框架的主要用途:

l  把对象组织以联名,以保在打印时其中的对立位置;

l  避免覆盖任何对象及于另外对象覆盖;

l  将报表划分也几独片。例如,在每一样页的顶部采用列表式的报表格式,而当脚用钜阵式的表格格式;

l  确保有对象总是在同样的页中。

框架分为两种植档次:缺省框架和用户定义框架。

缺省框架,当接受缺省的布局模型时,Oracle
Reports会自动生成包含对象的框架。缺省框架的命名形式也“M_n”。缺省框架而可分为两栽:垂直可变的组框架和永恒尺寸的框架。例如,当创建初期缺省之布局模型时,Oracle
Reports产生一个环绕总体布局模型的组框架,这个组框架在笔直方向直达是可伸缩的。而一定尺寸的框架通常是环绕图文对象(Boilerplate)建立的,例如列的题目。

用户定义框架,用户定义的框架是于布局模型编辑器中通过“框架”工具建立之。

框架的关键性质:

l  在马上之前分页(Page Break Before):指示以打印该目标前开展换页。

l  于就之后分页(Page Break
After):指示在打印了该目标后开展换页,在那个背后的靶子都拿更换到下一样页打印。

l  页保护(Page
Protect):指示对象内之拥有目标尽可能地打印在一个页内,如果一个页容纳不生之话语,在初始打印该对象时会事先转移页。

l  垂直缩放值(Vertical
Elasticity):指示对象的垂直大小是否足以变更,有:收缩、扩展、固定、可变换。

l  水平缩放值(Horizontal
Elasticity):指示对象的水平高低是否足以转,有:收缩、扩展、固定、可转移。

l  打印对象在(Print Object
On):指示对象在报表的打印频率,有:全部页、除首页外之任何、除尾页外的任何、缺省、第一页、最后一页。

l  因以下条件打印(Base Print
On):指示对象是为一定目标要为含有对象啊原则进行打印。

l  跟随定位目标(Keep With Anthoring
Object):指示对象是不是跟随定位目标打印在同一个逻辑页中。

2)     重框架

再次框架主要用以展示由一个组检索出来的多行数据的对象。一个又框架可以分包其他布局对象,也可包外的更框架。重复框架是与记录相关的,它为一个组的诸一样长条记下及其所提到的数据模型对象都打印一不善。使用还框架可以控制记录层的亮与格式,比如:记录的打印方向、记录的当儿、边框线、颜色、字体等。重复框架的箭头方向指明了又框架还的大势。

嵌套的更框架常常用于建主/从表和分组表。

再框架分为两种档次,缺省的再次框架和用户定义之重新框架。

欠省的再框架,当接受缺省之布局模型时,Oracle
Reports会自行地吧数量模型中的每一个组生成一个更框架,并且为组被的各级一样列都指向承诺配置一个域,放在更框架内。

用户定义的重新框架,用户定义之重复框架是以布局模型编辑器中经过“重复框架”工具建立之。

复框架的几乎独第一性质:

l  源(Source):每一个还框架必须产生一个源(组)作为那个数额来,在更框架中每一样久来源于数据展示平糟;

l  打印方向(Print
Drection):重复框架中记录的打印方向,有:横向、纵向、横向/纵向、纵向/横向;

l  每页的绝深记录数(Maximum Record per
Page):在逻辑页上显示的复框架记录之太酷数额,可以透过该属性改善报表的可看性。例如,希望以每个逻辑页上只有显示三长记下,则用该属性设置也3。该属性的取值可以吧正整数和拖欠,若为空,则尽量在一个逻辑页上显示最特别数目的记录。

l  最小孤立记录数(Minimum Widow
Records):必须在同等摆逻辑页上显示的太少记录数。若由逻辑页的指定位置上马拓宽不下是属性被受起之记录数,则以于下一样摆逻辑页开始展示。。例如下图,有有限独独立的还框架按纵向打印,第二个又框架位于第一页的底层,但第一页上单独发生打印两条记下的长空了,为了使报表看起再美妙,我们希望亚只重复框架换记录可知由第二页开始打印,这时便用将“最小孤立记录数”设置为3。

 

l  列模式(Column
Mode):用于控制什么也重复框架中之笔录提取数额和格式化数据。这个特性有少数只选择:“是”和“否”。若选“是”,则允许以直达一个更框架的笔录没有从了结之前就是打印下一个复框架的笔录。例如,若设置“列模式”为凡,则则记录2直到第二页才由了结,但记录3倒是得以开始于首先页上打印了。若设置:“列模式”为“否”,则记录3不得不等到记录2打印完毕后,才开始于次页上打印。

 

l  水平框架间隔:重复框架记录里的程度距离。当打印方向也“纵向”或“纵向/横向”时,该属性的安装无效。

l  垂直框架间隔:重复框架记录中的垂直距离。当打印方向为“横向”或“横向/纵为”时,该属性之安装无效。

3)     

域是用来放参数、列、页号、当前日期等值的地方。例如一个参数或列没有对号入座的域,那么其的价值不会见以表格输出时显得。当好成一个缺省布局模型时,Oracle
Reports会自动地啊各级一个排建立一个域,并拿这些域排放在更框架中。

地段有零星种植类型:缺省域和用户定义域。

短省域,当属好缺省的布局模型时,Oracle
Reports会自行地为各国一样排列有一个域,并拿这些域排放在更框架中。每一个域底特性都是短缺省转变的,但是足以修改。

用户定义域,用户可因需要定义有域来显示诸如页号、日期等信息。

用户定义的域是在布局模型编辑器中通过“域”工具建立的。

地方的数出自来三种植:数据模型的面临的一个排或参数、系统变量和网参数。

系变量包括:当前日期(&current date)、页码(&logical page
number)、面板数值(&panel number)、物理页码(&physucal page
number)、总记页(&total logical pages)、总记面版(&total
panel)、总计物理页(&total physical pages)

地区的特性:

l  源(Source):域值的源于。

l  源数据来(Source Data Type):源的数据类型,此属性为只读。

l  可视的(Visible):若设置也“否”,则表示该域不让格式化。这无异于属性公用于那些在图文对象吃引用的域,通常用于格式信件式报表。若想引用一个“可视的”属性设置为“否”的域,可以以图文对象吃输入“&fieldname”。

l  格式掩码(Format
Mask):定义为何种格式显示在域中之日子以及数值。有值列表可供应选择,但是字符型的地段没有拖欠属性。

l  编页码(Page
Numbering):当域的源列是页码、物理页码、总记页、总记物理页之一时,可以应用该属性来定义如何算页号。点击:编页码按钮,出现“编页码”对话框。

4)     图文

图文是一个询问得到不交可又比方当表被输出的目标,如文本、线条、图形等。可以以图文对象来转报表的外观,例如建立报表的页头、增加图等。

图文有三三两两种植类型:缺省的图文和用户定义之图文。

缺少省之图文,当接受缺省的布局模型时,Oracle
Reports会自行地为每个域生成一个排列标题。对于某些报表类型,Oracle
Reports会以列标题下加相同久下划线。

用户定义的图文,一栽是透过图文工具新建的一个图文,一种植是自从外表文件输入的图文。

由表文件输入图文,可以就此“导入”工具或用“链接文件”工具来链接一个文本。

链接一个文件,只是建立了一个指针,指向要连的公文,并无将文件的内容输入到图文对象被,所以于各一样破运行报表时,都动态地将文件内容输入到图文对象被,因此,图文对象被之情节是动态的,会趁机文件内容的转移如果反,采用这种艺术,能保证报表的输出总是反映最新的情节,这种方法是于布局模型编辑中经过“链接文件”工具建立之。

5)     定位

恒定是用以确定报表输出时子对象相对于那个大对象的水准与直位置。由于在运行报表时,有些布局尺寸会发生变化,所以要因此定位来定义一个目标相对于任何一个目标的位置。

诸如,对于一个水平方向大小可变的重框架,希望她里面的一个域总是在重复框架水平方向的中游位置,同时又欲该域与重框架的顶部保持一贯距离,由于还框架是水平方向大小可变的,因此该前实际出口时之程度尺寸是不足预知的,所以要定义一个稳住来促成上述目的,如下图所著。

 

之所以定位连接的星星点点独对象之间的对立位置关系是根据数据取出数据之后的目标的骨子里尺寸,而无是目标在布局模型编辑器中的尺码。布局模型编辑器中目标中相对位置实际上反映了报表输出对象的位置。

定点分为两种类型:隐式定位以及出示定位。

隐式定位,Oracle
Reports会活动地为每个没有显得定位的布局对象特别成一个隐式定位,以备该对象为其他对象覆盖。隐式定位节约了用来定义每个对象的职位的时间。

在靶导航器中,若采用“对象类型视图”,则看不到隐式定位,但足以看来显示定位。若以“所有权视图”,则缺乏省气象下看不到定位的,要惦记看定位,须打开“工具”菜单中之“选项”->“导航器”,弹出“对象导航器选择”对话框,在“布局”栏中选中“定位信息”,则会当导航器中展示所有的定势信息,包括隐式定位和显示定位。

然隐式定位于布局模型编辑器中连不可见的。

显示定位,显示定位是以布局模型编辑器中经“定位”工具建立的,通过展示定位好强制性地用或多或少对象在一块儿。当一个靶在档次要垂直的分寸或者会见趁多笔录之增减而变更时,或者以控制一个对象相对于重新框架的相对位置时,显示定位更加有因此。

3.     设计报表布局的注意事项

1)     设计布局前的参数设置

点击菜单“工具”->“选项”->“标尺”

 

2)     在数据模型和布局模型的编页面被的,可以点击菜单“视图”来挑选是否出示标尺,网格等辅助设计的面板,尤其是“工具面板”一定要摘显示。

 

3)     最外层固定框的特性“打印对象在”必须装也“第一页”。

4)     表头的“打印对象在”必须装也“全部页”。

5)     要兑现活动分页,必须将无限外层的固定框或循环框“打印对象在”设置为“第一页”。

6)     可以当循环框外面加一个固定框,并拿固定框的特性更改为“可转换”,固定框的出口会就循环框的职务。

4.     参数表格

当运行一个表格时,Oracle
Reports会弹有一个窗口,称为参数表。可以以是窗口被输入参数值,从而屏蔽原有的缺乏省值。

要是无起报表参数表格,在运作时,Oracle
Reports将会见活动建立一个参数表格以供用户输入参数,但当报表运行了晚,这个参数表格的情就会自动地为剔除。

Oracle
Reports提供缺省的参数表格样式,可以用缺省之参数表格,也足以在缺省参数表格的底子及开展改动,或者建立用户从曾定义的参数表格。

确立缺省的参数表格:

点击菜单“工具”->“参数表单创建器”

 

改“标题”、“提示行”和“状态行”的情节,它们将展示在运转参数表的上面;

基于需要选中要在运作参数表中出现的参数,被入选参数的背景色为黑色,如齐图备受,参数“P_ORDER_FROM”被入选,则该参数将会晤起于运转参数表中,用户可呢它输入新价值,而无动该不够省值。注意,这里不被入选的参数不见面油然而生于紧缺省之参数表格中。

 

建立用户从定义之参数表格:

双击对象导航器中的“页面参数表单”

 

以这里,只能建立两种植对象:域对象和图文对象。

Ø 域对象:域对象是故来放置参数值的地方。如果某个平等参数没有概念跟那对应的地段对象,则在运作参数表及不会见展示该参数。缺省情况下,Oracle
Reports会也各个一个参数建立一个域靶。也可以经过采用“报表编辑器-参数表格”中之“域”工具建立一个域,然后拿一个已有的系统参数或用户定义参数分配至该域。

Ø 图文对象:图文对象的企图和在布局模型中之打算一样。缺省气象下,Oracle
Reports会变动运行参数表底“标题”、“提示行”和“状态行”图文对象,并为每个地区建立一个标签图文对象。也足以通过动用“报表编辑器-参数表格”中之“图文”工具建立额外的图文对象为增进运行参数表底可观性。

5.     Oracle Reports触发器

每当Oracle Reports中,触发器可分为三类:

Ø 报表触发器:共有5只表格触发器,分别在运转报表的不等等级为触发。

Ø 数据模型触发器:包括公式列触发器、组过滤触发器、参数验证触发器。其中,公式列触发器在历次处理列时吃硌,组过滤触发器可以由组中的各级一样久记下点,参数验证触发器在显示参数表格和用户距离参数域时受触发。

Ø 布局格式触发器:在处理布局对象时点。

1)     报表触发器,是用户以运行报表与安报表格式时,在指定时刻执行的PL/SQL函数。这些报表触发器允许用户执行以下操作:调整报表格式、执行初始化任务、访问数据库。

系统定义了五个表格触发器,用户可改触发器的内容,但不可知创造新的表触发器。

 

Before Parameter Form

每当展示运行参数表之前被触发,即使参数表被躲起来不亮,此触发器仍然可以于硌。它用于存取并修改参数值、PL/SQL全局变量和报表组列值。通常使用这个触发器来检验命令行参数。

After Parameter Form

在亮运行参数表下触发,即使参数表被埋伏起来不显示,此触发器仍然可以叫触发。该触发器用于存取、校验和修改参数值。如果当运行着冒出谬误,则赶回到运行参数表。该触发器不能够存取数据模型中之排。

Before Reoprt

拖欠触发器在分析查询语法和摸索数据之后、运行报表之前为触发,用于实践初始化处理各种参数。

Between Pages

除开第一页以外,该触发器在各国一样页报表被格式化之前给触发,用于页的格式化设置。在预览器中,此触发器只以率先涂鸦进该页时被触发,如果继续还进来该页,则是触发器不再受硌。

After Report

拖欠触发器在剥离预览器后或者以报表输出到目的地(如:文件、打印机或Oracle*Mail用户标识)以后初触发,用于破除对参数的初始化处理,如删减临时表。无论报表是否成功实行,此触发器一直是处在激活状态。

2)     数据模型触发器

公式列触发器,是借助以公式列中编一个PL/SQL函数,该列又足以组织其他对象,如占位列或公式列本身。

公式列中的代码必须回到给公式列,此列可以是一个“虚”列,既在报表的布局模型中未让显示出来。

例:

目的:希望当员工工资大于3000常,奖金亮的凡工薪就以0.1,否则奖金亮出底凡工资就以0.5,并让闹提示。

贯彻方式:使用公式列构成两只占位列“BONUS”和“BONUS_CHAR”,根据不同尺度为这半个列赋值。

 

[sql] view
plain
copy
print?

  1. FUNCTION SET_BONUS RETURN CHAR IS  
  2. BEGIN  
  3. IF :SAL > 3000 THEN  
  4. :BONUS := :SAL * 0.1;  
  5. :BONUS_CHAR := ‘ten percent’;  
  6. ELSE  
  7. :BONUS := :SAL * 0.1;  
  8. :BONUS_CHAR := ‘ten percent’;  
  9. END IF;  
  10. RETURN ”;  
  11. END;  

    FUNCTION SET_BONUS RETURN CHAR IS
    BEGIN
    IF :SAL > 3000 THEN
    :BONUS := :SAL 0.1;
    :BONUS_CHAR := ‘ten percent’;
    ELSE
    :BONUS := :SAL
    0.1;
    :BONUS_CHAR := ‘ten percent’;
    END IF;
    RETURN ”;
    END;

鉴于该公式列是一个虚列,因此函数返回一个空字符串。

组过滤器,组过滤器用于限制出现在表被的记录之行数。组过滤器对数据的限是在找数据以后,在显示数据之前,所有使用组过滤器并无克压缩由于查询语句检索出来的数码总量,若想减少由于查询语句检索出来的多少,可以于查询语句被使用WHERE子词进行限。

Oracle
Reports提供了点滴单组过滤器:前几只(First)和后几乎独(Last)。用户还可以编制好之组过滤器。

组过滤器只能由少数单返回值:

Ø TRUE:表示提取组中指定的多寡。

Ø FALSE:表示未提组中指定的数量。

此外,组过滤器不克用来交叉分组。

证触发器,用户可以在系参数和用户从定义之参数中编验证触发器,用于检测输入到运行参数表中之参数值,如果参数不科学,则住报表运行。

证明触发器必须回到一个布尔值(TRUE或FALSE)。若返回吗FALSE,则光标会留于参数中,用户可输入不同的值或虽然脱离报表的周转。

以身作则:验证用户输入的订单号限是否站得住

 

[sql] view
plain
copy
print?

  1. FUNCTION P_ORDER_TOValidTrigger return boolean IS  
  2. BEGIN  
  3.  IF :P_ORDER_TO < :P_ORDER_FROM THEN  
  4.    RETURN (FALSE);  
  5.  ELSE  
  6.   RETURN (TRUE);  
  7.  END IF;  
  8. END;  

    FUNCTION P_ORDER_TOValidTrigger return boolean IS
    BEGIN
    IF :P_ORDER_TO < :P_ORDER_FROM THEN RETURN (FALSE); ELSE RETURN (TRUE); END IF; END;

3)     布局格式触发器

多数底布局对象还蕴含一个搭架子格式触发器,它是布局对象的一个公共属性。布局格式触发器存在被以下目标被:框架、重复框、域和图文对象。

布局格式触发器允许用户以报表运行时冲早晚原则动态地修改布局对象的显得或隐藏。

4)     动作触发器

动作触发器是当预览器中选中一个按钮时实施之PL/SQL过程。该触发器可以动态地调用另一个表格要施行PL/SQL程序。在动作触发器中输入的PL/SQL过程,可参看Oracle
Reports中之封装函数、过程和雅处理。

6.     Oracle Reports中的PL/SQL

用户可用PL/SQL用于Oracle Reports对象吃因为充实报表功能。

1)     在PL/SQL中援报表对象

在PL/SQL中引用报表对象有些许种艺术:

变量值引用,通过在Oracle Reports对象前加一个“:”号来引用Oracle
Reports对象值。

例如,要使ORDER_NUM列的价值吗1000,则输入:ORDER_NUM:=  1000

变量名叫援,通过用单引号括起Oracle Reports对象来引用对象的称号。

譬如说,要使变量FIELDNAME等于F_NAME域的称谓,FIELDNAME := ‘F_NAME’

2)     Oracle Reports中的PL/SQL块

Oracle Reports中能用以下9种艺术的PL/SQL结构块:

PL/SQL程序库(external libraries)、附件的程序库(attached libraries)

程序单元(report program units)、报表触发器(report triggers)

组过滤器(group filters)、公式(formula)、验证触发器(validation
triggers)

格式触发器(format triggers)、动作触发器(action triggers)

 

PL/SQL:PL/SQL程序库、程序单元;

Trigger&FiltersOracle:重复框、框架、域、图文、参数、组、报表触发器;

Formula:公式列;

Button Triggers:按钮;

3)     Oracle Reports中之PL/SQL异常处理

一般说来发生三栽档次的可怜处理:

Ø 用户定义之很处理,具体方法参考PL/SQL技术文档。

Ø 标准包装的好处理,是Oracle系统预先定义的差,同参考PL/SQL技术文档。

Ø Oracle Reports特发出包的良处理,Oracle
Reports特有的两样定义在SRW包中,具体产生:

SRW.CONTEXT_FAILURE     SRW.RUN_REPORT_FAILURE

SRW.DO_SQL_FAILURESRW.RUN_REPORT_BATCHNO

SRW.INTEGER_ERROR SRW.TRUNCATED_VALUE

SRW.MAXROW_INERRSRW.UNKNOW_QUERY

SRW.MAXROW_UNSETSRW.UNKNOW_USER_EXIT

SRW.NULL_ARGUMENTS    SRW.USER_EXIT_FAILURE

SRW.PROGRAM_ABORT

颇处理的采用规则:

Ø 如果用户并未拍卖一个百般,那么Oracle
Reports会给用户失去处理它,既当老处理给激活时,Oracle
Reports将有一个错误,终止报表的履。

Ø 用户须以现阶段PL/SQL域中测试结构块的破产情况。

如,如果用户给公式列编写了PL/SQL代码,那么该公式列必须测试其好的砸情况,其他对象竟是另一个公式列是勿能够针对它的挫败进行测试。

4)     SRW包

为了便利用户使用,Oracle
Reports提供了一个包装的保,称为SRW。它是一模一样组PL/SQL结构块的聚众,包含了成百上千可是在仓库以及表格被援的函数、过程与非常处理。用户可以当库房或者报表中参考引用它。

当用户以PL/SQL结构块被参阅SWR包时,必须长前缀SRW,例如SRW.DO_SQL。

SRW包的用途有:控制表的运转、在运转时输出信息、初始化域对象、执行DDL语句(建立/删除临时表)、调用用户接口、动态地设置布局对象属性、如字和填充模式等。

可在报表中之任何PL/SQL语句被援引SRW包的其他部分,但是,SRW包中之始末只能以Oracle
Reports中吃引用,不能够在另工具(如Oracle Forms)中于引述。

SRW包由下列结构块组成:

SRW.BREAK         SRW.CONTEXT_FAILURE

SRW.DO_SQL      SRW.DO_SQL_FAILURE

SRW.GETERR_RUN       SRW.GET_PAGE_NUM

SRW.INTEGER_ERROR SRW.MAXROW_INERR

SRW.MAXROW_UNSETSRW.MESSAGE

SRW. NULL_ARGUMENTS   SRW.PROGRAM_ABORT

SRW.REFERENCE         SRW.RUN_REPORT

SRW.SET_ATTR           SRW.RUN_REPORT_FAILURE

SRW.RUN_REPORT_BATCHNO     SRW.SET_FIELD_CHAR

SRW.SET_FIELD_DATE  SRW.SET_FIELD_NUM

SRW.SET_MAXROW           SRW.TRACE_ADD_OPTION

SRW.TRACE_END        SRW.TRACE_REM_OPTION

SRW.TRACE_START            SRW.TRUNCATED_VALUE

SRW.UNKNOWN_QUERY    SRW.UNKNOWN_USER_EXIT

SRW.USER_EXIT          SRW.USER_EXIT20

SRW.USER_EXIT_FAILURE

7.     程序单元以及附加的程序库

1)     程序单元(Program Units)

次第单元是指自目前报表中之其它PL/SQL库中参阅引用的管教、函数和经过。程序单元不能够为其他程序参考。若想创造一个能于多独程序参考引用的管、函数或过程,需要创造一个PL/SQL程序库。

 

2)     附加的程序库(Attached Libraries)

对片比较通用的函数和进程,或者逻辑比较复杂的函数和经过,我们可以拿它集合在一起写成一个PL/SQL程序库。一个PL/SQL程序库就是一个PLL库文件。

每当表中,我们可以运用附加的程序库的计来引用它。对于附加程序库,用户可以当表被调用它的担保、函数和进程。

Ø 建立PL/SQL程序库

PL/SQL程序库,即PLL文件,需要以Reports Builder中失立。

详见的起过程如下:

a)     在靶导航器中甄选“PL/SQL库”节点,然后单击工具栏上之“创建”工具,则在“PL/SQL库”节点下会产出一个初的库结点,该节点下发生个别独子节点:“程序单元”子节点和“附加的仓库”子节点。

b)     选中“程序单元”子结点,然后单击工具栏上的“创建”工具,弹出“新建程序单元对话框。

c)     在对话框中输入过程、函数、包说明或担保主体的号,接受对话框,则弹有“程序单元编辑器”窗口。

d)     输入PL/SQL过程、函数、包之代码,编译后关门“程序单元编辑器”窗口。

 

 e)     点击保存按钮,保存库文件及指定的目中。

 

Ø 连接PL/SQL程序库

确立好PL/SQL程序库后,库中之富有函数、过程还好在另Oracle产品面临于引述。但以援前,须以库连接到援它的表格及。

连日步骤如下:

a)     在目标导航器中摘“附加的堆栈(Attached
Libraries)”节点,然后单击工具栏上的“创建”工具,则弹来“附加程序库(Attach
library)”对话框。

b)     先在对话框中输入PL/SQL库底称谓,或者点击“浏览”来挑选要增大的PL/SQL程序库文件。然后又单击“附加”按钮来连接该PL/SQL程序库。

c)     系统会提示“附加的程序库的称号包含不可移植的目录设置,要去此路也?”,一般我们见面选取“Yes”,这样附加的库文件和路线无关,只要将仓库文件在REPORTS60_PATH所指定的途径下网便好找到。如果选“No”,则附加的库文件带有绝对路径,库文件之职位不能够改,不便民报表安装。

以建好的PL/SQL程序库附加以表格及后,程序库库中的装有函数、过程、包就足以以表的其它地方吃调用。

 

相关文章