Недавно я обновил 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;