本教程向您介绍如何利用两个报表查询创建一个包含一个表和一个图形的 PDF 报表。
大约 1 个小时
一个报表查询可以包含多个查询。这使您能够轻松创建含有多个查询结果的 PDF 文件。在本教程中,您将创建一个含有两个查询的报表查询。报表布局在一个报表布局中放入一个表和一个图形。执行报表时,PDF 文件将在一个文档中包含两个报表。
在本节中,您将创建一个含有多个查询的报表查询。执行以下步骤:
.
输入以下 URL,登录到 Oracle Application Express。http://:8080/apex。要登录 Oracle Application Express,输入以下详细信息,然后单击 Login。
Workspace:Username:
Password:
.
在工作区主页上,单击 Application Builder。
.
选择 Printing Application。
.
单击 Shared Components。
.
在 Reports 下,单击 Report Queries。
.
单击 Create。
.
为 Name 输入 multiquery,然后单击 Next。
.
单击 Query Builder 创建查询。
.
从查询列表中选择 OEHR_EMPLOYEES。
.
选中以下各列前面的复选框,然后单击 Return。
FIRST_NAME
LAST_NAME
HIRE_DATE
JOB_ID
SALARY
.
随即显示该 SQL 查询。单击 Next。
.
您打算再添加一个查询,单击 Add Query。
.
再次单击 Query Builder。
.
选择 OEHR_DEPARTMENTS 和 OEHR_EMPLOYEES。
.
要创建联接条件,将 OEHR_DEPARTMENTS.MANAGER_ID 拖到 OEHR_EMPLOYEES.EMPLOYEE_ID 上。
.
选中以下各列前面的复选框,然后单击 Return。
OEHR_DEPARTMENTS.DEPARTMENT_NAME
OEHR_DEPARTMENTS.MANAGER_ID
OEHR_EMPLOYEES.FIRST_NAME
OEHR_EMPLOYEES.LAST_NAME
OEHR_EMPLOYEES.SALARY
.
单击 Create 创建该查询。
.
现在已定义好了查询。在下一部分中,您将使用 Oracle BI Publisher Desktop 创建报表布局。
在本节中,您将使用 Oracle BI Publisher Desktop 基于多个查询创建一个报表布局。执行以下步骤:
.
在 Report Query 向导的 Source Queries 页面上,单击 Download。
.
单击 Save,以默认的文件名 multiquery.xml 保存该文件。然后关闭该下载窗口。
.
打开 Microsoft Word。选择 Oracle BI Publisher > Data > Load Sample XML Data...
.
从 apex 目录中选择 multiquery.xml,然后单击 Open。
.
数据加载成功。单击 OK。
.
选择 Oracle BI Publisher > Insert > Table/Form...
.
您想在表中显示 Rowset1Row 下的所有列。将 Rowset1 Row 拖放到 Template 区域。
.
选择 Drop All Nodes。
.
单击 OK 创建表。
.
随即显示该表。
.
调整各列的宽度,添加一个标题。
.
现在您想利用第二个查询创建一个图表。选择 Oracle BI Publisher > Insert > Chart...
.
从 Rowset2 Row 下,将 Salary 拖放到 Values 上。
.
将 Department Name 拖放到 Labels 上。
.
针对 Type 选择 Pie Chart。向下滚动到 Title 域,输入 Total Salary Percentage by Department。单击 OK。
.
随即显示该图表。
.
您需要将您的布局另存为一个 RTF 文件。选择 File > Save As...。对 Save as Type 选择 Rich Text Format (*.rtf),对 File Name 输入 multiquery.rtf,转到 apex 目录以便将文件保存于此,然后单击 Save。
.
切换回 Application Express,单击 Next。
.
单击 Browse...,选择您刚才创建的 RTF 文件。从 apex 目录中选择 multiquery.rtf 目录,然后单击 Open。
.
单击 Next。
.
为了测试您的报表,首先需要启动 BI Publisher。双击桌面上的 Start BI Publisher 图标。
.
单击 Test Report 对报表进行测试。
.
出现对话框时,单击 Open。
.
现在,表中填充有数据,向下滚动以查看图表。
.
关闭该 PDF 报表。在 Create Shared Query 页面上,单击 Finish。
.
您已成功创建了报表查询和报表布局。在下一节中,您将在一个页面上创建一个用来调用该报表的按钮。
在本节中,您将从应用程序的一个页面中调用该报表查询。执行以下步骤:
.
转到 Printing Application 页面。单击 Home 页面。
.
单击 Create Button 图标。
.
选择 Home 区域,单击 Next。
.
接受默认设置,单击 Next。
.
对 Button Name 输入 Print Report,对 Action 选择 Download printable report query,然后单击 Next。
.
接受默认设置,单击 Next。
.
从快速链接列表中选择 [Top],或者从下拉列表中选择 Top of Region,对 Alignment 选择 Left,然后单击 Next。
.
对 Report Query 选择 multiquery,然后单击 Create Button。
.
按钮创建成功。单击 Run。
.
系统可能要求您登录应用程序。输入 obe/obe,然后单击 Login。
.
单击 Print Report。
.
单击 Open 打开该 PDF 报表。
.
随即显示报表。
您可以在应用程序中动态地加入图像。在教程的本节中,您将创建可在 PDF 报表中动态添加图像的报表查询和布局。
在本节中,您将更改 OEHR_EMPLOYEES 表,在其中添加 BLOB 列并对该列加载数据。执行以下步骤:
.
打开一个 DOS 命令提示符,执行 addblobdata.sql 脚本。
cd apex
sqlplus obe/obe
@addblobdata
.
要查看 OEHR_EMPLOYEES 表中的数据,输入以下 URL,登录到 Oracle Application Express。
http://localhost:8080/apex
.
选择 Home 区域,然后单击 Next。
.
要登录 Oracle Application Express,请输入以下详细信息,然后单击 Login。
Workspace:Username:
Password:
.
在工作区主页上,单击 SQL Workshop。
.
单击 Object Browser。
.
从表的列表中选择 OEHR_EMPLOYEES。
注意,现在列出了额外的 BLOB 列。选择 Data 选项卡。
.
向左滚动,查看员工 101 和 103 的数据。
.
注意,在 FILENAME 和 MIMETYPE 列中出现了数据。
为使您的 PDF 报表包含 BLOB,需要将数据转换为 CLOB base 64 编码格式。您将创建一个函数来执行这一转换。执行以下步骤:
.
从 Components 列表中选择 SQL Scripts。
.
单击 Upload。
.
单击 Browse...,选择 blob2clobase64.sql 文件,然后单击 Open。
.
单击 Upload。
.
单击该脚本的图标。
.
单击 Run。
.
单击 Run 确认。
.
单击 View Results 图标。
.
blob2clobase64 函数创建成功。
在本节中,您将创建一个报表查询和一个报表布局。执行以下步骤:
.
转到 Application Builder。选择 Printing Application。
.
单击 Shared Components。
.
在 Reports 下面,单击 Report Queries。
.
单击 Create。
.
对 Name 输入 blobquery,然后单击 Next。
.
输入以下查询,然后单击 Next。注意,该 SQL 语句调用您在上一节中创建的函数,以将 BLOB 列 PHOTO 转换为 CLOB based 64 编码格式。
select
employee_id,
first_name||' '||last_name name,
filename,
mimetype,
blob2clobase64(photo) photo
from oehr_employees
where photo is not null
.
该查询创建完毕。单击 Next。
.
单击 Browse...,选择 bloblist2.rtf 文件,然后单击 Open。
.
单击 Next。
.
如果尚未启动 BI Publisher,您首先需要启动它。双击桌面上的 Start BI Publisher 图标。
.
单击 Test Report。
.
单击 Open。
.
随即显示该报表。完成对该报表的查看后,关闭该窗口。
.
单击 Finish。
.
您已成功创建了报表查询和报表布局。在下一节中,您将在一个页面上创建一个按钮来运行该报表。选择您的 Application 路径式导航项。
在本节中,您将从应用程序的一个页面中调用该报表查询。执行以下步骤:
.
转到 Printing Application 页面。单击 Home 页面。
.
单击 Create Button 图标。
.
选择 Home 区域,然后单击 Next。
.
接受默认设置,单击 Next。
.
对 Button Name 输入 Print Report with Images,对 Action 选择 Download printable report query,然后单击 Next。
.
接受默认设置,单击 Next。
.
从快速链接列表中选择 [Top],或者从下拉列表中选择 Top of Region,对 Alignment 选择 Left,然后单击 Next。
.
对 Report Query 选择 blobquery,然后单击 Create Button。
.
按钮创建成功。单击 Run。
.
系统可能要求您登录应用程序。输入 obe/obe,然后单击 Login。
.
单击 Print Report With Images。
.
单击 Open 打开该 PDF 报表。
.
随即显示报表。
您可将含有 BLOB 列的报表内容保存于您的数据库中。在教程的本节中,您将创建一个新表来保存生成的报表,然后创建一个包含该表内容的报表。
在本节中,您将上载并运行一个脚本,该脚本创建一个表以保存您生成的报表。执行以下步骤:
.
打开浏览器,输入以下 URL,登录到 Oracle Application Express。
http://localhost:8080/apex
.
要登录 Oracle Application Express,请输入以下详细信息,然后单击 Login。
Workspace:Username:
Password:
.
单击 SQL Workshop 选项卡。然后,单击 SQL Scripts。
.
单击 Upload。
.
单击 Browse...,选择 report_archive_tbl.sql 文件,然后单击 Open。
.
单击 Upload。
.
单击report_archive_tbl.sql脚本图标。
.
单击 Run。
.
单击 Run 确认。
.
单击 View Results 图标。
.
report_archive 表创建成功。
在本节中,您将创建一个过程以将报表保存在数据库中。执行以下步骤:
.
转到 Application Builder。选择 Printing Application。
.
单击 Home 页面。
.
您需要创建一个过程,该过程可将报表保存于数据库中。在 Processes 下面,单击 Create 图标。
.
选择 PL/SQL,然后单击 Next。
.
对 Name 输入 store_blobquery_report,然后单击 Next。
.
在 PL/SQL Page Process 区域输入以下代码,然后单击 Next。
declare
l_report blob;
begin
l_report := apex_util.get_print_document (
p_application_id => :APP_ID,
p_report_query_name => 'blobquery',
p_report_layout_name => 'blobquery',
p_report_layout_type => 'rtf',
p_document_format => 'pdf'
);
insert into report_archive (
filename,
mimetype,
report,
created_date,
created_by
) values (
'BLOB Query Search Results ('||to_char(sysdate,'DDMonYYYY')||')',
'application/pdf',
l_report,
sysdate,
:USER
);
end;
.
单击 Next。
.
对 When Button Pressed 选择 PRINT_REPORT_WITH_IMAGES,然后单击 Create Process。
.
您还想创建一个过程来保存多查询的报表。在 Processes 下面,单击 Create 图标。
.
选择 PL/SQL,然后单击 Next。
.
对 Name 输入 store_multiquery_report,然后单击 Next。
.
在 PL/SQL Page Process 区域输入以下代码,然后单击 Next。
declare
l_report blob;
begin
l_report := apex_util.get_print_document (
p_application_id => :APP_ID,
p_report_query_name => 'multiquery',
p_report_layout_name => 'multiquery',
p_report_layout_type => 'rtf',
p_document_format => 'pdf'
);
insert into report_archive (
filename,
mimetype,
report,
created_date,
created_by
) values (
'Multi Query Search Results ('||to_char(sysdate,'DDMonYYYY')||')',
'application/pdf',
l_report,
sysdate,
:USER
);
end;
.
单击 Next。
.
对 When Button Pressed 选择 PRINT_REPORT,然后单击 Create Process。
.
单击 Run。
.
单击 Print Report With Images。出现打开或保存报表的对话框时,您可以单击 Cancel。
.
单击 Print Report。出现打开或保存报表的对话框时,您可以单击 Cancel。
注意:对于您所运行的每个报表,都有两行插入到数据库中。
在本节中,您将创建了一个报表,该报表包含数据库中 report_archive 表的数据。执行以下步骤:
.
转到 Printing Application 页面。单击 Home 页面。
.
在 Regions 下面,单击 Create 图标。
.
选择 Report,然后单击 Next。
.
确保选中 SQL Report,然后单击 Next。
.
对 Title 输入 List of Stored Reports,然后单击 Next。
.
在 SQL Query 区域中输入以下 SQL,然后单击 Create Region。
SELECT id,
filename,
mimetype,
created_date,
created_by,
dbms_lob.getlength(report) report_length
FROM report_archive
.
报表创建完毕。您需要对 Report Attributes 作一些更改。在 Regions 下面,选择 Report 链接。
.
在 Headings Type 下面,单击 Custom。将 Report Length 的标题名称更改为 Report。取消选中 MIMETYPE 的 Show 复选框。您还想在 Report Length 列中创建一个链接来下载该报表。选择 Report Length 的编辑图标。
.
在 Column Formatting 下面的 Number / Date Format 域中输入以下字符串,然后单击 Apply Changes。
DOWNLOAD:REPORT_ARCHIVE:REPORT:ID::MIMETYPE:FILENAME:::inline:[Download]
注意,该字符串包含以下参数:
::::::::::
.
单击 Run Page。
.
这里列出了在上一节中运行的报表。要查看一个报表,单击 [Download] 链接。
.
成功显示出报表。
您可以创建多个报表布局以供最终用户执行报表时选择使用。在本节中,您将创建两个报表布局。您会在应用程序的一个页面中创建一个可用报表布局单选按钮组。在执行该页面时,可选择生成报表时要使用的布局。
在本节中,您将创建多个报表布局。执行以下步骤:
.
打开浏览器,输入以下 URL,登录到 Oracle Application Express。
.http://localhost:8080/apex
.
要登录 Oracle Application Express,请输入以下详细信息,然后单击 Login。
Workspace:Username:
Password:
.
在工作区主页上,单击 Application Builder。
.
选择 Printing Application。
.
单击 Shared Components。
.
在 Reports 下面,单击 Report Layouts。
.
单击 Create。
.
选择 Named Columns (RTF),然后单击 Next。
.
对 Name 输入 DynamicLayout1,然后单击 Browse...
.
从 apex 目录中选择 Dynamic_Layout1.rtf,然后单击 Open。
.
单击 Create Layout。
.
您想创建另一个报表布局。单击 Create。
.
选择 Named Columns (RTF),然后单击 Next。
.
对 Name 输入 DynamicLayout2,然后单击 Browse...
.
从 apex 目录中选择 Dynamic_Layout2.rtf,然后单击 Open。
.
单击 Create Layout。
.
您还需要创建一个报表查询,报表布局将基于该报表查询。选择 Shared Components 路径式导航项。
.
在 Reports 下,选择 Report Queries。
.
单击 Create。
.
对 Name 输入 DynamicQuery,然后单击 Next。
.
输入以下查询,然后单击 Next。
SELECT first_name,
last_name,
email,
hire_date, salary
FROM oehr_employees
.
单击 Next。
.
对 Report Layout Source 选择 Use generic report layout,然后单击 Next。
.
单击 Finish。
.
报表查询创建成功。在下一节中,您将创建一些选项来供用户选择以动态生成报表。
在本节中,您将创建多个选择条件项。执行以下步骤:
.
转到 Printing Application 页面。选择 Home 页面。
.
在 Regions 下面,选择 Create 图标。
.
选择 HTML,然后单击 Next。
.
再次选择 HTML,然后单击 Next。
.
对 Title 输入 Dynamic Report Generation,然后单击 Next。
.
您现在需要创建一些选择条件项以用于生成报表。第一个项是一个隐藏的受保护项,用于保存报表查询。在 Items 下面,单击 Create 图标。
.
对 Item Type 选择 Hidden,然后单击 Next。
.
选择 Hidden and Protected,然后单击 Next。
.
对 Item Name 输入 P1_REPORT_QUERY,对 Region 选择 Dynamic Report Generation,然后单击 Next。
.
单击 Next。
.
对 Item Source Query 输入 DynamicQuery,然后单击 Create Item。
.
要创建的下一项是选择列表,用户可通过该列表来选择报表的显示方式:是在浏览器中显示还是作为可在 Acrobat Reader 中显示的附加文件来显示。在 Items 下面,单击 Create 图标。
.
对 Item Type 选择 Select List,然后单击 Next。
.
再次选择 Select List,然后单击 Next。
.
对 Item Name 输入 P1_CONTENT_DISP,对 Region 选择 Dynamic Report Generation,然后单击 Next。
.
对 Display Null Option 选择 No,然后选择 Create or edit static List of Values。
.
输入下列值,单击 Apply。
Display Value
Return Value
In Browser
Inline
Save / Open in separate Window
attachment
.
单击 Next。
.
对 Label 输入 Display,然后单击 Next。
.
单击 Create Item。
.
要创建的最后一项是一个单选按钮组,用于显示一组报表布局以供选择。在 Items 下面,选择 Create 图标。
.
选择 Radio,然后单击 Next。
.
选择 Radio Group,然后单击 Next。
.
对 Item Name 输入 P1_REPORT_LAYOUT,对 Region 选择 Dynamic Report Generation,然后单击 Next。
.
对 Display Null Option 选择 No,然后选择 Create or edit static List of Values。
.
输入以下值,然后单击 Apply。
Display Value
Return Value
Dynamic Layout 1
DynamicLayout1
Dynamic Layout 2
DynamicLayout2
.
单击 Next。
.
接受默认设置,单击 Next。
.
对 Default 输入 DynamicLayout1,然后单击 Create Item。
.
您现在需要创建一个按钮,通过该按钮可调用一个过程以生成报表(在创建该按钮后再创建该过程)。在 Buttons 下,单击 Create 图标。
.
选择 Dynamic Report Generation 区域,然后单击 Next。
.
接受默认设置,单击 Next。
.
对 Button Name 输入 Print,然后单击 Next。
.
接受默认设置,单击 Next。
.
从快速链接列表中选择 [Top],或者从下拉列表中选择 Top of Region,对 Alignment 选择 Left,然后单击 Next。
.
单击 Create Button。
.
您要创建的最后一个组件就是前面提到的那个过程,单击 Print 按钮时会调用该过程以生成报表。在 Processes 下面,单击 Create 图标。
.
选择 PL/SQL 并单击 Next。
.
对 Name 输入 print,然后单击 Next。
.
输入以下代码,然后单击 Next。注意,此代码执行 download_print_document API 来生成报表。生成报表时,将根据用户为该页面上各项所指定的值来生成。
apex_util.download_print_document (p_file_name => 'myreport123',
p_content_disposition => :P1_CONTENT_DISP,
p_application_id => :APP_ID,
p_report_query_name => :P1_REPORT_QUERY,
p_report_layout_name => :P1_REPORT_LAYOUT,
p_report_layout_type => 'rtf',
p_document_format => 'pdf'
);
.
单击 Next。
.
对 When Button Pressed 选择 Print,然后单击 Create Process。
在下一节中,您将运行页面并生成报表。
在本节中,您将运行页面以生成报表。执行以下步骤:
.
单击 Run。
.
选择 Save / Open in Separate Window,然后单击 Print。
.
报表已生成。单击 Open 查看该报表。
.
此时以 Dynamic Layout 1 布局显示报表。关闭该报表。
.
对 Display 选择 In Browser,选择 Dynamic Layout 2,然后单击 Print。
.
这次是在浏览器中以 Dynamic Layout 2 布局显示您的报表。
通过此教程,您学会了怎样:
创建具有多个查询的报表查询
使用 Oracle BI Publisher Desktop 创建报表布局
从应用程序页面调用报表
添加并加载 BLOB 列
创建一个执行 BLOB 到 CLOB based 64 编码格式转换的函数
创建报表查询和布局
从应用程序页面调用报表
创建数据库表以保存报表
生成报表并将其保存到数据库中
访问数据库中保存的报表