数据库输出HTML格式报表的测试

 当需要在数据库中开发输出HTML报表的时候, 我们可以在过程中直接使用htp包来实现html代码和对数据处理后的输出. 并输出为需要的格式(HTML标记语言来控制) . 以下提供一个直接从数据库生成HTML报表的测试例子, 需要根据自己的需要来进行修改或增加.

  在使用前需要配置apache的连接, 这样在调用过程的时候, 系统直接将生成的html输出到WEB;

  --配置apache连接:

  如安装在D:systemhttps下,D:systemhttpsApachemodplsqlconfdads.conf文件. 设置为:

<Location /ss>
SetHandler pls_handler
Order deny,allow
Allow from all
AllowOverride None
PlsqlDatabaseUsername     dinya
PlsqlDatabasePassword     dinya
PlsqlDatabaseConnectString  dinya:1521:ora10g
PlsqlAuthenticationMode    Basic
</Location>

  当然对数据库的连接必须有效, 具体请见相关的设置文档. 重起Apache服务.

  --创建测试包:

create or replace package cux_html_report as
function t(p_size in number, p_content in varchar2) return varchar2 ;
type c_sql is ref cursor;

procedure main;
procedure html_header(p_title in varchar2);
procedure html_body(p_sql in varchar2,p_column_count in number,p_subtitle
in varchar2,p_align in varchar2,p_black in varchar2);
procedure html_tail;

procedure table_h(p_width in number,p_border in number,p_align in varchar2);
procedure table_t;
procedure tr_(p_col_count in number,p_column in varchar2,p_align in varchar2,
p_black in varchar2);
procedure tr_h;
procedure tr_t;
procedure td_(p_col_count in number,p_content in varchar2,p_align in varchar2,
p_black in varchar2);

procedure report_header(p_title in varchar2);
procedure report_subtitle(p_col_count in number,p_content in varchar2,p_align
in varchar2,p_black in varchar2);
procedure report_tail(p_content in varchar2);
end ;
/
create or replace package body cux_html_report as
function t(p_size in number, p_content in varchar2) return varchar2 as
i number:=0;
v_out varchar2(300):='';
p_cont varchar2(1000):=p_content;
begin
for ii in 1..p_size loop
select substr(p_cont,0,decode(instr(p_cont,';'),0,length(p_cont),instr(p_cont,';')-1))
into v_out from dual ;
p_cont:=substr(p_cont,instr(p_cont,';')+1);
i:=i+1;
if i=p_size then
return v_out;
end if;
end loop;
end ;

/*******************************************************************************
主程序
需要处理分页的问题
********************************************************************************/
procedure main as
begin
html_header('我的测试报表');
report_header('我的标题');
html_body('select t.owner||'';''||t.object_name||'';''||t.object_id||'';''|
|t.object_type||'';''||t.owner
from all_objects t
where t.owner=''DINYA''
and rownum<=100',5,'序号;对象名称;ID;类型','center','<b></b>'); 
report_tail('这里是报表尾');
html_tail;
end;

--页头,固定格式
procedure html_header(p_title in varchar2) as
begin
htp.p('
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>'||nvl(trim(p_title),'无标题文档')||'</title>
</head>
<body>'); 
end ;

--页体, 根据SQL程序和字段数,展示数据
procedure html_body(p_sql in varchar2,p_column_count in number,p_subtitle
in varchar2,p_align in varchar2,p_black in varchar2) as
i number:=0;
c c_sql;
v_column varchar2(4000);
begin
table_h(90,1,'center');
report_subtitle(p_column_count,p_subtitle,p_align,p_black);
open c for p_sql;
loop
fetch c into v_column;      
exit when c%notfound;
i:=i+1;
tr_(p_column_count,v_column,'left','');
end loop;
table_t;
end ;

--页尾, 固定内容
procedure html_tail as
begin
htp.p('</body> </html>');
end ;

--------------------------------------------------------------------------------
--表头, 表的属性
procedure table_h(p_width in number,p_border in number,p_align in varchar2) as
begin
htp.p('<table width="'||p_width||'%" border="'||p_border||'
" align="'||p_align||'">');
end ;

--表尾
procedure table_t as
begin
htp.p('</table>');
end ;
--------------------------------------------------------------------------------

--表格行
--------------------------------------------------------------------------------
procedure tr_(p_col_count in number,p_column in varchar2,p_align in varchar2,
p_black in varchar2) as
begin
htp.p('<tr>');
td_(p_col_count,p_column,p_align,p_black);
htp.p('</tr>');
end;
procedure tr_h as
begin
htp.p('<tr>');
end ;
procedure tr_t as
begin
htp.p('</tr>');
end ;
-------------------------------------------------------------------------------

--表单元格
-------------------------------------------------------------------------------
procedure td_(p_col_count in number,p_content in varchar2,p_align in varchar2,
p_black in varchar2) as
v_cont varchar2(300):=p_content;
v_out varchar2(300):='';
begin
for i in 1..p_col_count loop
select substr(v_cont,0,decode(instr(v_cont,';'),0,length(v_cont),
instr(v_cont,';')-1))
into v_out from dual ;
htp.p('<td align="'||p_align||'">'||substr(p_black,1,3)||v_out|
|substr(p_black,4)||'</td>');
v_cont:=substr(v_cont,instr(v_cont,';')+1);
end loop;
end ;
------------------------------------------------------------------------------

--报表内容部分
-----------------------------------------------------------------------------
procedure report_header(p_title in varchar2) as
begin
table_h(90,0,'center');
tr_(1,p_title,'center','<b></b>');
table_t;
end ;

procedure report_subtitle(p_col_count in number,p_content in varchar2,
p_align in varchar2,p_black in varchar2) as
begin
tr_h;
td_(p_col_count,p_content,p_align,p_black);
tr_t;
end ;

procedure report_tail(p_content in varchar2) as
begin
table_h(90,0,'center');
tr_(1,p_content,'left','');
table_t;
end;
----------------------------------------------------------------------------------

end ;
/
SQL> @d:cux_html_report.pck
Package created.
Package body created.
SQL>

编译没有错误后, 使用http://dinya:7777/ss/cux_html_report.main 即可查看报表.

  如果在main过程中使用owa_util.mime_header(ccontent_type => 'application/vnd.ms-excel'); 可以直接将数据生成到Excel中.

  如:

procedure main as
begin
owa_util.mime_header(ccontent_type => 'application/vnd.ms-excel');
html_header('我的测试报表');

  需要使用的话, 可以根据需要修改上面的程序.

时间: 2024-09-28 21:31:42

数据库输出HTML格式报表的测试的相关文章

数据库输出HTML格式报表的测试简介

当需要在数据库中开发输出HTML报表的时候, 我们可以在过程中直接使用htp包来实现html代码和对数据处理后的输出. 并输出为需要的格式(HTML标记语言来控制) . 以下提供一个直接从数据库生成HTML报表的测试例子, 需要根据自己的需要来进行修改或增加. 在使用前需要配置apache的连接, 这样在调用过程的时候, 系统直接将生成的html输出到WEB; --配置apache连接: 如安装在D:\system\https下,D:\system\https\Apache\modplsql\c

谈两种数据库内容HTML格式的输出方法

在实际应用VFP编写各类应用系统过程中,用户可能建立了大量的数据信息,这些信息一般都是存贮在各类数据表中,随着网络技术的迅速发展,许多数据信息要求在网上共享使用,如果相关的信息已经存在数据表中,可以不需要重新输入信息,直接生成可以在网上浏览使用的HTML格式文件,下面笔者介绍两种数据库内容到HTML格式输出的方法. 一.是利用VFP提供的数据表内容转换到HTML格式文件类库实现.在VFP系统目的FFC子目录下存在一个_internet.vcx类库,其中_dbf2html为数据表到HTML格式转换

如何输出ANSI格式的繁体中文?在线等……

问题描述 privatevoidtestOutputFile(){FileStreamfs=newFileStream(@"D:Exptest.txt",FileMode.Create);StringBuildersb=newStringBuilder();sb.Append(@"T1CL070TCL07014100002-2014121520141215CB20141215-11寶虹科技測試1T300010100-2001800000002.0000201412150000

php输出excel格式文件

如果要利用了php输出excel格式文件就必须利用header content-type:application/vnd.ms-excel来实现.如下  代码如下 复制代码 <?php         $filename = name .'.xls';         header("content-type:application/vnd.ms-excel");         header("content-disposition:attachment;filena

框架-JAVA问题:删除数据库中数据的代码,测试不会报错,但实际什么都删不了

问题描述 JAVA问题:删除数据库中数据的代码,测试不会报错,但实际什么都删不了 这些操作做完后,数据库里的t_product表中,id=2的数据依然在,不是刷新的问题,刷新也还在 解决方案 为什么你的三个函数保存.修改.删除方法调用sql的时候都没有传递sql参数值呢? 解决方案二: 调用mapper里面的sql代码的时候,把要删除的id传进去了吗?不应该是sqlsession.delete("",参数);吗? 解决方案三: 参数没带.sqlsession.delect带上id 解决

图片-Timestamp在数据库是年月日格式,为什么在前台获取就是一串数字?

问题描述 Timestamp在数据库是年月日格式,为什么在前台获取就是一串数字? 如图第一张是数据库的,第二张是前台的,我想要的 前台也是年月日格式 发现这样转成date也不行,哪位知道请告知谢谢 解决方案 时间戳类型转换为String再使用,你贴出的代码setDeliverdtime设置的是数值,设置成String试试. 解决方案二: 看这个.http://www.cnblogs.com/Matrix54/archive/2012/05/03/2481260.html

php连接access数据库的accdb格式应该怎么连接

问题描述 php连接access数据库的accdb格式应该怎么连接 我的系统是win7+access2010/32位+php5.2.数据库生成的文件格式是accdb,请问怎么连接上去. 解决方案 驱动指定为Microsoft.ACE.OLEDB.12.0;不是microsoft.jet了.试试下面的 $cnStr="provider=Microsoft.ACE.OLEDB.12.0;data source=".realpath("db.mdb"); $cn; fun

mfc-MFC组合框连接access数据库输出文字到编辑框

问题描述 MFC组合框连接access数据库输出文字到编辑框 如题,准备做一个查询系统,想在组合框中输入查询内容,点击查询,连接access数据库,将所得内容输出在编辑框中~数据库做好了 解决方案 GetWindowText获取组合框等输入内容,然后用CString的Format拼接SQL语句,查询数据库,获取返回的记录集 然后SetWindowText设置各个对应的字符串

text格式 if图像显示-C# 显示从数据库读出text格式Gif

问题描述 C# 显示从数据库读出text格式Gif 原来用PB在 MS SQLSERVER 存储了一个text 格式的gif文件 怎么在winfrom显示呢?读出来时这样:"GIF89a''?" 解决方案 具体参考:http://www.cnblogs.com/jeffwongishandsome/archive/2009/08/27/1554440.html 解决方案二: 看上去都是乱码了,是不是要用二进制读取,而且存入的时候是不是数据已经不正确了.应该也用二进制存入. 解决方案三: