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

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

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

--配置apache连接:

如安装在D:\system\https下,D:\system\https\Apache\modplsql\conf\dads.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-08-27 04:15:17

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

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

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

谈两种数据库内容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 解决方案二: 看上去都是乱码了,是不是要用二进制读取,而且存入的时候是不是数据已经不正确了.应该也用二进制存入. 解决方案三: