【问题标题】:Improving Performance of Crystal Reports using Stored Procedures使用存储过程提高 Crystal Reports 的性能
【发布时间】:2011-02-28 21:15:54
【问题描述】:

最近我更新了一个水晶报表,它在客户端完成所有工作(选择、公式等),并使用 Oracle 11g 数据库通过存储过程更改了要在服务器端完成的所有逻辑.现在该报告仅用于显示存储过程的输出,没有其他用途。我读到的关于这个主题的所有内容都表明,使用存储过程应该会大大减少报告的运行时间,但从服务器检索数据仍然需要大致相同的时间。我写的存储过程有问题,还是水晶报表本身有问题?这是存储过程代码以及定义必要的REF CURSOR的包。

CREATE OR REPLACE
PROCEDURE         SP90_INVENTORYDATA_ALL 
(
  invdata_cur IN OUT sftnecm.inv_data_all_pkg.inv_data_all_type,
  dCurrentEndDate IN vw_METADATA.CASEENTRCVDDATE%type,
  dCurrentStartDate IN vw_METADATA.CASEENTRCVDDATE%type
)
AS
BEGIN
  OPEN invdata_cur FOR
     SELECT 
      vw_METADATA.CREATIONTIME, 
      vw_METADATA.RESRESOLUTIONDATE, 
      vw_METADATA.CASEENTRCVDDATE, 
      vw_METADATA.CASESTATUS, 
      vw_METADATA.CASENUMBER,
      (CASE WHEN vw_METADATA.CASEENTRCVDDATE < dCurrentStartDate AND (
        (vw_METADATA.CASESTATUS is null OR vw_METADATA.CASESTATUS != 'Closed') OR
        TO_DATE(vw_METADATA.RESRESOLUTIONDATE, 'MM/DD/YYYY') >= dCurrentStartDate) then 1 else 0 end) InventoryBegin,
      (CASE WHEN (to_date(vw_METADATA.RESRESOLUTIONDATE, 'MM/DD/YYYY') BETWEEN dCurrentStartDate AND dCurrentEndDate) 
        AND vw_METADATA.RESRESOLUTIONDATE is not null AND vw_METADATA.CASESTATUS is not null then 1 else 0 end) CaseClosed,
      (CASE WHEN vw_METADATA.CASEENTRCVDDATE BETWEEN dCurrentStartDate AND dCurrentEndDate then 1 else 0 end) CaseCreated   
 FROM   vw_METADATA 
 WHERE  vw_METADATA.CASEENTRCVDDATE <= dCurrentEndDate
 ORDER BY vw_METADATA.CREATIONTIME, vw_METADATA.CASESTATUS;
END SP90_INVENTORYDATA_ALL;

还有包裹:

CREATE OR REPLACE PACKAGE inv_data_all_pkg
AS TYPE inv_data_all_type IS REF CURSOR
RETURN inv_data_all_temp%ROWTYPE;
END inv_data_all_pkg;

【问题讨论】:

  • 你真的需要使用光标吗?
  • 我们需要查看VW_METADATA 的视图语句——使用存储过程只会突出实际查询的糟糕程度。根据提供的内容,这意味着视图内的内容没有帮助。

标签: oracle stored-procedures crystal-reports oracle11g


【解决方案1】:

如果 DB 服务器和 Crystal 服务器之间没有延迟,则更改数据处理发生的位置不会有任何影响。特别是如果没有大量数据通过网络移动。或者换句话说,两个同样快速的服务器被一个高性能的网络接口隔开,除非将数据处理转移到数据库服务器显着减少网络上的数据量,否则差别不大。

考虑调整查询(包括另一位受访者指出的)VW_METADATA 的定义。

【讨论】:

  • 我没有设计视图,但我只是查看了 ddl,它是一团糟。我相信调整它会解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-28
  • 1970-01-01
相关资源
最近更新 更多