> 文章列表 > Oracle Reports教程分享

Oracle Reports教程分享

Oracle Reports教程分享

Oracle Reports概述

Oracle Reports是Oracle 关系数据库系统提供的一个功能强大、易于使用的报表定义工具软件,它用于开发、显示和打印结果报表。使用Oracle Reports的应用开发人员应当熟悉SQL和PL/SQL。

Oracle Reports的应用分为两步:

第一步,由应用开发人员使用Oracle Reports来编制各种报表程序,应用开发人员在定义报表应用以前应先了解实际的需求,然后将以上需求抽向成Oracle Reports的相应对象,并填入到Oracle Reports的设计界面中。

第二步,即由最终用户运行应用开发人员所定义的各种报表程序,填入实际的运行参数,从Oracle数据库中检索数据,生成并打印实际的报表。

Oracle Reports的版本

Oracle Reports最常用的版本主要有两个,一个是Developer 2000 1.6中包含的Oracle Reports 2.5,它是开发Oracle Applications 11版所用的版本;另一个版本是Oracle Forms & Reports 6I中包含的Oracle Reports 6I,它是开发Oracle Applications 11I所用的版本。下面两图分别是Oracle Reports 2.5和Oracle Reports 6I的界面

Oracle Reports的安装

Oracle产品的安装方法大体类似,下面以Oracle Reports2.5的安装为例,介绍 Oracle Reports的安装:

  1. 将Oracle Reports的安装光盘放入光驱中,Oracle安装程序会自动运行,然后选择要使用的语言,填入公司名称和Oracle当前根目录,按“确定”按钮进入下一步;

  1. 出现安装管理器窗口后,在左边窗口选择Developer/2000-Reports 2.5组件后点击“安装”按钮进行安装,安装程序会自动分析还需安装的其它组件并进行安装,安装完成后退出安装程序。

  1. 进入Oracle安装目录下的network/admin目录,修改SQLNET.ORA文件和TNSNAMES.ORA文件,配置SQL*NET使得Oracle Reports可以连上Oracle 数据库。下面是两个文件的样例:

文件:SQLNET.ORA

TRACE_LEVEL_CLIENT = OFF

names.directory_path = (TNSNAMES)

names.default_domain = world

name.default_zone = world

文件:TNSNAMES.ORA

SSE.world =

  (DESCRIPTION =

    (ADDRESS_LIST =

        (ADDRESS =

          (COMMUNITY = tcp.world)

          (PROTOCOL = TCP)          (Host = 10.7.100.7)          (Port = 1521)

        )

    )

    (CONNECT_DATA = (SID = ora816)

    )

  )

4、修改完后进入Reports Designer,选择File/Connect菜单,填入用户名,口令和连接串,连按Oracle数据库,如果可以连通,说明Oracle Reports安装成功。

建立并运行一个简单的报表

我们先以一个最简单的报表为例,说明Oracle Reports的开发流程。

建立报表

我们的例子是查询当前用户下的对象,包括表、视图以及同义词。

1、编写查询的SQL语句。

当前用户下所有的对象可以在系统的一个VIEW “CAT”中查出,这个VIEW结构如下:

SQL> desc cat;

 列名                              可空值否             类型

 -------------------------------     --------           ----

 TABLE_NAME             NOT NULL   VARCHAR2(30)

 TABLE_TYPE                                         VARCHAR2(11)

所以我们要写的查询很简单:

SELECT TABLE_NAME,TABLE_TYPE

FROM CAT;

2、打开Reports Designer,连接数据库;

由“开始\\程序\\Developer 2000 for NT\\ Reports Designer”打开“Reports Designer”;

选择菜单“File\\Connect”连接数据库,在对话框内填入用户名、口令及数据库连接串,点击“Connect”连接数据库。

3、创建数据模型(Date Model)

双击“Date Model”进入数据模型设计器;点击左边工具栏上的“SQL”图标,并在中间空白处点一下,建立一个查询“Q_1”;双击“Q_1”进入“Q_1”的编辑对话框,在“Select Statement”中写入我们刚才所写的查询语句:

SELECT TABLE_NAME,TABLE_TYPE

FROM CAT;

选择“OK”,这样就建立了一个简单的查询。

4、建立布局(Layout)

在“Date Model”窗口中,点击上面工具条上的“Default Layout”图标, 建立缺省的布局;在Style页面中选择“Tabular”类型;

择OK,建立缺省的报表布局;

“对象浏览器(Object 

点击“运行报表(Run Report)”,测试刚才创建的报表。

编译运行报表

我们用Oracle Reports建立的报表源文件是rdf文件,要在客户端运行报表,需要把报表编译为rep文件。

1、编译报表

在“Object Navigator”窗口下选中要编译的报表,选择菜单“File\\Administration\\Generate”,再确定要生成的rdf文件的名称和要存储的位置,就会把报表编译为rep文件。在这里,我们编译好的文件为test1.rep。
 

2、运行报表

选择菜单“开始\\程序\\Developer 2000 for NT\\Reports  Runtime”打开“报表运行器(Reports Runtime)”;选择菜单“File\\Connect”连接数据库;选择“File\\Run”并选中要运行报表的rep文件,出现参数窗口,填写需要的参数后选择“Run Report”报表运行出来,可以选择“Print”打印报表。

除了手工通过“Reports Runtime”来运行报表外,我们也可以建一个Windows的快捷方式来直接运行报表,快捷方式的样例如下:

C:\\ORANT\\BIN\\R25RUN32.EXE d:\\test1.rdf system/manager@meng_prod

另外,我们也可以在Forms上直接调用报表;或者把报表安装在application上,在Application里面来运行报表;或者通过Report Server,用Web方式来运行报表。这些方式,在这里就不做详细的介绍。

习题

建立并运行一个简单的报表

数据模型(Data Model)

本章首先介绍数据模型的功能及购成,以及编缉数据模型的数据模型编辑器,然后分别介绍构成数据模型的五个部分:查询(Queries)、组(Groups)、列(Columns)、连接(Links)和参数(Parameter)

功能及构成

数据模型用于定义一个报表中使用的数据及数据结构,这些数据可以是数据库表中的原始数据,也可以是经过加工后的数据,如工资的总和等。从数据库中检索出的数据是否在报表输出中显示,也是在数据模型中定义的。

数据模型由五部分对象组成:查询(Queries)、组(Groups)、列(Columns)、连接(Links)和参数(Parameter)。下面的章切将详细介绍这五种对象。

数据模型编辑器

打开数据模型编辑器

有三种方式打开数据模型编辑器的方法:

  1. 选择“工具”上的“报表编辑器”,打开“报表编辑器”窗口。在“报表编辑器”窗口中,再单击“数据模型”小图标,进入:“报表编辑器-数据模型”窗口。
  2. 双击对象导航器中的“数据模型结点图标,进入:“报表编辑器-数据模型”窗口。
  3. 在“窗口”菜单上选择一个含有数据模型的窗口。

组成

数据模型编辑器由以下部分组成:

绘图区:在绘图区中可以以图形方式对对象进行创建、修改、定位和删除操作。但是在这里只能看到对象间的相对位置关系,如果想看对象的具体设置,必须打开对象的属性框。

工具条:工具条提供了一些对数据模型及其对象进行操作的工具。其中包括有从“报表编辑器-数据模型”窗口转移到:“报表编辑器-布局模型”窗口或“报表编辑器-参数表格”窗口的工具。注意,数据模型编辑器、布局编辑器和参数表格编辑器都属于报表编辑器,一次只能打开其中一个,可以通过工具条在三者窗口间切换。

查询

查询实际上就是一条SQL SELECT语句,它决定了从数据库中指定的表或视图中取哪些行和列。通过查询所取得的数据可被用于计算、排序、集合运算等,并可以在报表输出时显示。

内部查询和外部查询

报表中的查询可分为两种:内部查询和外部查询。两者的区别在于外部查询可以被其他报表多次引用,而内部查询不能被其他报表参考引用,只能被其所属的报表引用。

单查询报表和多查询报表

根据报表中查询的个数可以将报表分为单查询报表和多查询报表。

单查询报表

只有一个查询的报表称为单查询报表。单查询报表的常见格式有列表式(Tabular)、标签式(Mailing Label)、信封式(Form Letter)以及分组式。单查询报表虽然只有一个查询,但可以多次显示查询数据,并且可以用不同的格式显示。

多查询报表

含有多个查询的报表称为多查询报表。多个查询相互之单可以有关联,称为相关的多查询报表;也可以没有关联,称为不相关的多查询报表。

相关的多查询报表

多个查询之间相互关联,一般用于主从式报表,也就是说,报表的一部分数据决定了报表的另一部分数据。取出前一部分数据的查询称为主查询,取出后一部分的查询称为从查询,主查询的每一条记录查询都将引起从查询的执行,从查询只检索与主查询匹配的那些记录。两个查询之间通过定义数据连接产生联系。

不相关的多查询报表

多个查询之间没有关联,Oracle Reports将独立地为每一个查询获取数据,显示出来的是一系列不相关的数据。

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

将一个查询的数据分成几个集合,每个集合称为组。组有过滤查询数据的功能,通过组可以对查询的结果进行过滤。

在缺省的情况下,Oracle Reports为数据模型中的每一个查询产生一个组,取名取成查询的名称。查询名称以“q_”开头,而组名以“g_”开头。例如,查询名称为“q_emp”,则Oracle Reports为其产生的缺省组名为“g_emp”。组的名称可以修改,但若在组建立以后改变查询的名称,其组名不会随着相应改变。

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

组过滤器

组过滤器允许有条件的选择由查询检索出来的数据,通过组过滤器过滤查询结果。

Oracle Reports封装过滤器:Oracle Reports封装过滤器允许指定在一个组中希望检索的记录数,在报表开发过程中可以使用封装过滤器来限制数据。Oracle Reports软件包中有两个封装过滤器:First Filter,只显示组内前n条记录;Last Filter,只显示组内后n条记录。

应用一个封装过滤器的步骤如下:双击组对象,打开组对象属性选项板;选择过滤器类型,可选择“无”、“前几个”、“后几个”和“PL/SQL”;选择“前几个”或者“后几个”则会出现“记录的数值”,在该项中填入所要过滤的记录数目。

用户定义过滤器:用户可以定义自己的过滤器来限制在特定条件下的记录的检索。用户定义的过滤器是通过编写PL/SQL代码建立的。

建立用户定义过滤器的步骤如下:双击组对象,打开组对象属性选项板;选择过滤器类型为“PL/SQL”,则会出现“PL/SQL过滤器”;单击“PL/SQL过滤器”按钮,弹出“PL/SQL程序单元编辑器”,输入PL/SQL程序,编译通过后退出。

组的层次结构

数据模型中组的层次决定了在缺省布局对话框中组的次序,同时也决定了在缺省布局中组的次序,但这不是最终的报表格式,因为可以对缺省的显示格式进行修改。

在数据模型编辑器中若没有数据连接,则组的层次是由组在数据模型编辑器中的位置从左至右,从上至下决定的。在数据模型编辑器中若有数据连接,则组的层次可以由数据连接描述。

报表的列表示报表的数据。在定义了从数据库检索数据的查询后,可能需要进一步调整报表,增加更多的列,而这些列可以用作报表的数据,执行总计汇总等功能。

列的类型

Oracle Reports中的列可以分为两类,缺省列和用户定义列。、

1、缺省列

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等。

2、用户定义列

用户可在特定的组内或报表一级建立列。在特定的组内建立的列称为组一级的列,该列与组内的其他列有相同的显示频度。而报表一级的列只在整个报表中显示一次。用户定义列分为三种类型:公式列、占位列和汇总列。

(1)公式列(Formula Column):公式列是对其他列执行一个用户定义的计算。例如,公式“:SAL*1.2”中对“SAL”列进行计算。而“:SAL+:COMM”则是对一条记录两个列“SAL”和“COMM”进行计算。建立公式列的方法是用PL/SQL语句写一个函数,从一个或多个列中计算结果,该列的缺省名为“CF_n”。

建立公式列的具体步骤如下:在数据模型编辑器中单击:“公式列”小图标。如果要在组中建一个公式列,则在画布的空白区域内单击一下鼠标左键,如果要建一个报表一级的公式列,则在画布的空白区域内单击一下鼠标左键,会生成一个公式列对象;双击该公式列对象,弹出其属性选项板;双击属性选项板中的“PL/SQL公式”项,弹出“程序单无编辑器”;在“程序单元编辑器”中为公式项用PL/SQL语句书写一个计算公式并编译通过。

(2)占位列(Placeholder Column):占位列的值和数据类型是通过PL/SQL语句设置的,该列的缺省名为“CP_n”。当需要有选择地设置一个列的值时(例如,在每次出现第n个记录时,或每次出现包含有特殊值的记录时)占位列非常有用。

可以在以下几个地方设置占位列的值:在Before Reports的报表触发器中(如果占位列是一个报表级的列);在报表级的公式列中(如果占位列是一个报表级的列);在占位列组或占位列组下面的公式中(为组中的每一条记录设一次值)。

占位列的用途:在公式列的PL/SQL代码中计算出的一些值可以分配给不同的占位列;利用占位列保存中间值。例如,存储当前检索出的最高工资对应的记录。

(3)汇总列(Summary Column):汇总列是对其他列的数据执行计算。Oracle Reports为汇总列提供的计算函数有:总和、平均值、最小值、最大值、计数、第一个、最后一个、%(总计)、标准差、方差。

建立一个公式列的具体步骤如下:在数据模型编辑器中单击“汇总列”小图标,如果要在组中建立一个汇总列,则在组中你希望该列所在的位置上单击一下鼠标左键,如果要建一个报表一级的汇总列,则在画布的空白区域内单击一下鼠标左键,会生成一个汇总列;双击该汇总列对象,弹出其属性选项板;从属性选项板中的“汇总”项下的“功能”子项的下拉列表中选择所需的计算公式;在“源”子项中选择要汇总的列名;在“重设于”子项中选择汇总的频度,即是就整个报表做一次汇总还是每一页做一次汇总,或者每一组做一次汇总;当“功能”子项被选为“%(总计)”时,“计算于”项有用,其值为计算“%(总计)”的汇总列时的组名。该项只对“%(总计)”有用。

列的属性选项板

以下分别介绍列的公共属性,以及公式列、占位列和汇总列的各自特殊属性。

  1. 公共属性

在用户定义列的属性选项板中,有许多属性是相同的。以下是公共属性:

名称(Name):列的名称,不超过30个字节。对于数据库列,即为查询的SELECT语句中列的列名,对于公式列,其名称为“CF_n”,对于占位列,其名称为“CP_n”,对于汇总列,其名称为“CS_n”。其中n是整数。

备注(Comment):为列所作的注释,不超过64K。

数据类型(Datatype):列中数据的类型,有Character、Date、Long、Long Raw、Number、Raw、Ref、Varchar、Varchar2等。对于数据库列,其数据直接从数据库的数据字共中继承;对于公式列和占位列,其缺省数据类型为Number;对于汇总列,如果其执行的是计数运算,则数据类型为Number,否则与其参与计算的列的类型相同。

宽度(Width):列值所能占据的最大字符数。

空时的值(Value if Null):用此属性的值代替空值的列值。

以上属性中,除了备注和空时的值两个属性是可选的外,其余属性必须要填写。

  1. 公式列的特殊属性

分隔次序(Break Order):给出列值的排列顺序,有三个选择:升序、降序或不排序;

PL/SQL公式(PL/SQL Formula):是一个按钮,用于弹出“PL/SQL编辑器”。

  1. 占位列的特殊属性

PL/SQL公式(PL/SQL Formula):是一个按钮,用于弹出“PL/SQL编辑器”。

  1. 汇总列的特殊属性

功能(Function):确定对“源”中指定的列的值进行何种形式的计算。有值列表可供选择。

源(Source):指定进行运算的列的名称。在该属性中列出了所有可进行指定计算的列名。

计算于(Computer At):计算“%总计”类型的汇总列时的组名。缺省值为“报表”,有值列表可供选择。这项属性只有当功能为“%总计”时才有用。计算百分比是用总数去除一个值。这项属性定义用于百分比计算的总数。

重设于(Reset At):确定何时汇总列上的值会被重置为零,从而可重新计算下一个子合计。可以设为页、报表或某一组名,分别表示在该页、报表或组上该汇总列的值会被重置为零。有值列表可供选择。

单元次序(Product Order):只适用于矩阵报表中的列。由于在矩阵表中有很多组,这些组可以按不同的顺序求值。因此,在矩阵表中建立汇总列时,就需用Product Order属性告诉Oracle Reports先求哪个组的值,再求哪个组的值。