Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.server -> Re: Stored proc slower than direct sql query. Help needed
Sorry about that guys. Here's the revised code. I noticed that when I
replace the variables below with hard-coded values directly in the
query, it becomes a lot slower (similar to the stored proc). Your
suggestions are appreciated.
DECLARE
Counter INTEGER;
CurrentUserID VARCHAR2(15); GrossNetChk VARCHAR2(5); IdentConfChk VARCHAR2(5); RecordDateType VARCHAR2(20); RecordDateType2 VARCHAR2(20); SDate DATE; EDate DATE; SDate2 DATE; EDate2 DATE; ClientId VARCHAR2(20);
BEGIN
CURRENTUSERID := 'joseph';
GROSSNETCHK := 'Gross';
IDENTCONFCHK := 'Ident';
RECORDDATETYPE := 'D';
RECORDDATETYPE2 := 'A';
SDATE := TO_DATE('01/01/1900','MM/DD/YYYY');
EDATE := TO_DATE('01/01/2000','MM/DD/YYYY');
SDATE2 := TO_DATE('01/01/1900','MM/DD/YYYY');
EDATE2 := TO_DATE('01/01/2000','MM/DD/YYYY');
CLIENTID := '1';
INSERT INTO CAS.RPTACTIVITY
(vcListUser, SortId1, vcNumber, vcProviderName, dtDischargeDate, rCoveredCharges, siDRG, siNewDRG, rActualPay, vcReviewerName, Savings) SELECT CurrentUserId, DECODE(OrderByCombo, '1' , P.vcName, '2' , (U.vcLastName || ' ' || U.vcFirstName), '3' , NULL), R.vcNumber, P.vcName, R.dtDischargeDate, R.rCoveredCharges, R.siDRG, O.siNewDRG, DECODE(GrossNetChk, 'Gross' , O.rGrossPay, 'Net' , O.rNetPay), (U.vcLastName || ' ' || U.vcFirstName), DECODE(GrossNetChk||IdentConfChk, 'GrossIdent' , (R.rGrossPay - O.rNewGrossPay),
'GrossConf' , (R.rGrossPay -
O.rAuditedGrossPay),
'NetIdent' , (R.rNetPay -
O.rNewNetPay),
'NetConf' , (R.rNetPay -
O.rAuditedNetPay), NULL) FROM CAS.REVIEWS R, CAS.AUDITCLAIMS AC, CAS.Users U, CAS.AUDITS A, CAS.OUTCOMES O, CAS.DIVISIONS D, CAS.DIVISIONS D1, ( SELECT iP.*, iD.siCode, iD.siDefaultDivision FROM CAS.PROVIDERS iP, CAS.DIVISIONS iD WHERE iP.siDivisionCode = iD.siDefaultDivision) P WHERE (R.uClaimKey = AC.uClaimKey AND --Joins start here R.iAuditNumber = AC.iAuditNumber) AND (U.vcUserId = R.vcAuditorId AND U.vcClientId = ClientId) AND (AC.iAuditNumber = A.iAuditNumber AND -- filter out all except Closed Audits A.vcAuditStatus = 'C') AND (O.uClaimKey = AC.uClaimKey (+) AND O.iAuditNumber = AC.iAuditNumber (+)) AND R.siDivisionCode = D.siCode (+) AND D.siDefaultDivision = D1.siCode (+) AND R.siDivisionCode = P.siCode (+) AND R.vcProviderNumber = P.vcNumber (+) AND (RecordDateType = 'C' AND --Where clause starts here A.dtCloseDate BETWEEN SDate AND EDate OR RecordDateType = 'A' AND R.dtAdmitDate BETWEEN SDate AND EDate OR RecordDateType = 'D' AND R.dtDischargeDate BETWEEN SDate AND EDate OR RecordDateType = 'R' AND R.dtCreatedDate BETWEEN SDate AND EDate OR RecordDateType = 'M' AND O.dtAdjustmentMadeDate BETWEEN SDate AND EDate OR RecordDateType = 'Q' AND O.dtAdjustmentRequestDate BETWEEN SDate AND EDate ) AND (RecordDateType2 = 'C' AND A.dtCloseDate BETWEEN SDate2 AND EDate2 OR RecordDateType2 = 'A' AND R.dtAdmitDate BETWEEN SDate2 AND EDate2 OR RecordDateType2 = 'D' AND R.dtDischargeDate BETWEEN SDate2 AND EDate2 OR RecordDateType2 = 'R' AND R.dtCreatedDate BETWEEN SDate2 AND EDate2 OR RecordDateType2 = 'M' AND O.dtAdjustmentMadeDate BETWEEN SDate2 AND EDate2 OR RecordDateType2 = 'Q' AND O.dtAdjustmentRequestDate BETWEEN SDate2 AND EDate2 ) AND (SavingsGreaterThanZero IS NULL OR SavingsGreaterThanZero IS NOT NULL AND DECODE(GrossNetChk||IdentConfChk, 'GrossIdent' , R.rGrossPay - O.rNewGrossPay, 'GrossConf' , R.rGrossPay - O.rAuditedGrossPay, 'NetIdent' , R.rNetPay - O.rNewNetPay, 'NetConf' , R.rNetPay - O.rAuditedNetPay) > 0.0 );
COMMIT;
Counter := SQL%ROWCOUNT;
DBMS_OUTPUT.PUT_LINE(Counter);
END;
Daniel Morgan <damorgan_at_exesolutions.com> wrote in message news:<3CB5E8D5.7033BAFA_at_exesolutions.com>...
> This is extremely ugly for a number of reasons. Here are a few thoughts though they don't directly relate to > your issue. > > 1. Define default values when you declare your variables. For example: > > CURRENTUSERID VARCHAR2(15) := 'joseph'; > > 2. Define your variables based on fields. For example: >Received on Fri Apr 12 2002 - 09:15:45 CDT
![]() |
![]() |