网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.ExactPapers Oracle 1Z0-025 200.
.解决Oracle处理中文乱码的一种方.
.如何确定Oracle数据库表中重复的.
.一句T-SQL语句引发的思考 转帖.
.在Oracle中实现时间相加处理.
.弥补Oracle数据库访问限制绕过的.
.XFree86 4.x教程.
.在RHEL 3 的单机上安装oracle9i .
.Oracle中独一无二的Cache对象.
.使用OLE对象访问Oracle数据库.
.手工创建数据库的全部脚本及其说.
.Oracle安全性管理采取的基本措施.
.网络关系型数据库的代表Oracle 9i.
.9i新特性之——在线表格重定义研.
.Oracle erp销售订单订单行状态不.
.oracle联机重定义表示例.
.rman的增量备份恢复的测试问题.
.Oracle的面试问题——技术知识篇.
.如何在两个oracle服务器之间交换.
.关于数据库OPEN的深入探究.

谁能讲讲WEB发布中使报表异步运行的方式

发表日期:2008-2-9



  我做了一些有关异步运行报表的测试,得出一些经验,也有些问题没有解决。
  基本上,提交一个异步运行的报表任务,代码如下:
  
  DECLARE
  v_repobj REPORT_OBJECT := find_report_object('report1');
  v_repjob VARCHAR2(100);
  BEGIN
  --设置为异步运行
  set_report_object_property(v_repobj, REPORT_COMM_MODE, ASYNCHRONOUS);
  --假如设为RUNTIME,forms service启动reports runtime engine运行报表,结果保存在forms server上。
  --设为BATCH并且指定REPORT_SERVER,报表在reports service上运行,结果保存在reports server上。
  set_report_object_property(v_repobj, REPORT_EXECUTION_MODE,
  BATCH);
  set_report_object_property(v_repobj, REPORT_SERVER, 'REPSVR');
  --异步方式下,不能设置DESTYPE为PREVIEW, SCREEN。这里设为CACHE,以后可以通过CGI到REPORT SERVER取结果。
  set_report_object_property(v_repobj, REPORT_DESTYPE, CACHE);
  --设置报表格式
  set_report_object_property(v_repobj, REPORT_DESFORMAT, 'PDF');
  --运行报表,因为异步运行方式,run_report_object立即返回了一个jobid。
  v_repjob := run_report_object(v_repobj);
  --我们把这个jobid保存到一个全局变量里。
  :global.repjob := v_repjob;
  END;
  
  利用刚才保存的jobid,我们可以在以后取报表结果:
  DECLARE
  v_repjob VARCHAR2(100);
  v_repstatus VARCHAR2(20);
  BEGIN
  v_repjob := :global.repjob;
  v_repstatus := report_object_status(v_repjob);
  IF v_repstatus = 'FINISHED' THEN
  --报表保存在report server上,可以用rwcgi60.exe/getjobid[n]取结果。
  web.show_document('rwcgi60.exe/getjobid'v_repjob'?server=repsvr');
  END IF;
  END;
  
  上面的例子使用全局变量保存jobid,实际上我们可以将jobid保存在任何地方,例如数据库表、文本文件中。
  前面讲过我的需求是希望用户提交报表后可以退出程序,下次某个时间再登录进入检查报表状态,取报表结果。我对上面代码做了一点改动,将jobid保存到表中,以后再从表中取jobid。然而测试发现了一个问题,退出程序后重新进入,report_object_status(jobid)返回null。看来report_object_status在没有调用run_report_object时使用,是无法得到报表状态的。仅管我们可以用getjobid取结果,但是我们不能看到报表状态,这是个遗憾。用户也不能接受用showjobs显示出来的报表状态,他们希望在fomrs程序中看到。
上一篇:Oracle 10G 最佳20位新特性:等待界面 人气:550
下一篇:关于使用SHOW_SPACE() 人气:819
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐