Повышение производительности Crystal Reports с использованием хранимых процедур - PullRequest
0 голосов
/ 08 июня 2010

Недавно я обновил Crystal Report, который выполнял всю свою работу на стороне клиента (выборки, формулы и т. Д.), И изменил всю логику, выполняемую на стороне сервера, через хранимые процедуры с использованием базы данных Oracle 11g , Теперь отчет используется только для отображения результатов хранимых процедур и ничего больше. Все, что я прочитал на эту тему, говорит о том, что использование хранимых процедур должно значительно сократить время выполнения отчета, но для получения данных с сервера все равно требуется примерно столько же времени. Что-то не так с хранимой процедурой, которую я написал, или проблема в самом Crystal Report? Вот код хранимой процедуры вместе с пакетом, который определяет необходимый 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;

1 Ответ

0 голосов
/ 08 июня 2010

Если между сервером БД и сервером Crystal нет задержки, чем нет, изменение места обработки данных не будет иметь никакого эффекта.Особенно, если по сети не передается большое количество данных.Иными словами, с двумя одинаково быстрыми серверами, разделенными высокопроизводительным сетевым интерфейсом, разница будет незначительна, если перемещение обработки данных на сервер БД не приведет к значительному снижению объема данных по сети.

Рассмотрите возможность настройкизапрос (в том числе, как отметил другой респондент) определение VW_METADATA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...