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

BBKMLX

BBKMLX

2016-02-19 18:52

下面是个简单易学的数据库输出HTML格式报表的测试简介教程,图老师小编详细图解介绍包你轻松学会,喜欢的朋友赶紧get起来吧!

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

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

  --配置apache连接:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)

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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)

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('我的测试报表');

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


 

展开更多 50%)
分享

猜你喜欢

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

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

调用Access数据库的报表

编程语言 网络编程
调用Access数据库的报表

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

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

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

数据库的日期格式转换

PHP
数据库的日期格式转换

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

MySQL数据库格式轻松转

MySQL mysql数据库
MySQL数据库格式轻松转

利用SQL Server数据库快照形成报表

SQLServer
利用SQL Server数据库快照形成报表

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

我想依靠你永远在我旁边带路

我想依靠你永远在我旁边带路

打开文本文件各种方法

打开文本文件各种方法
下拉加载更多内容 ↓