Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Re: Stored proc slower than direct sql query. Help needed

Re: Stored proc slower than direct sql query. Help needed

From: JGP <deja_at_chothu.mailshell.com>
Date: 11 Apr 2002 09:05:54 -0700
Message-ID: <1e9cd49d.0204110805.184f0da7@posting.google.com>


Intentionally vague..that's a curious phrase! Anyways, here's the code:

DECLARE

	Counter INTEGER;
  	CurrentUserID		   VARCHAR2(15);
    SavingsByCombo         VARCHAR2(2);
    DivisionsList          VARCHAR2(1000);
    Ex_Divisions           CHAR(1);
    ClaimTypesList         VARCHAR2(1000);
    Ex_ClaimTypes          CHAR(1);
    ClaimNumber            VARCHAR2(1000);
    ProvidersList          VARCHAR2(1000);
    Ex_Providers           CHAR(1);
    RecordDateType         CHAR(1);
    BeginDate              VARCHAR2(20);
    EndDate                VARCHAR2(20);
    AuditNumber 		   VARCHAR2(1000);
    AuditTypesList 	       VARCHAR2(1000);
    Ex_AuditTypes          CHAR(1);
    SavingsGreaterThanZero CHAR(1);
    AppealDecsList         VARCHAR2(1000);
    Ex_AppealDecs          CHAR(1);
    ReviewersList          VARCHAR2(1000) ;
    Ex_Reviewers           CHAR(1);
    DispCodesList          VARCHAR2(1000) ;
    Ex_DispCodes           CHAR(1);
    GrossNetChk            VARCHAR2(5);
    IdentConfChk           VARCHAR2(5);
    OrderByCombo           CHAR(1);
    RecordDateType2        CHAR(1);
    BeginDate2             VARCHAR2(20);
    EndDate2               VARCHAR2(20);
    SDate                  DATE;
    EDate                  DATE;
    SDate2                 DATE;
    EDate2                 DATE;
    EditCodesList          VARCHAR2(1000);
    Ex_EditCodes           CHAR(1);
    DRGCodesList           VARCHAR2(1000) ;
    Ex_DRGCodes            CHAR(1);
    DiagCodesList          VARCHAR2(1000) ;
    Ex_DiagCodes           CHAR(1);
    ProcCodesList          VARCHAR2(1000) ;
    Ex_ProcCodes           CHAR(1);
    ClientId               VARCHAR2(20);
  

BEGIN
  CURRENTUSERID := 'joseph';
  SAVINGSBYCOMBO := NULL;
  DIVISIONSLIST := NULL;
  EX_DIVISIONS := NULL;
  CLAIMTYPESLIST := NULL;
  EX_CLAIMTYPES := NULL;
  CLAIMNUMBER := '9904332054400';
  PROVIDERSLIST := NULL;
  EX_PROVIDERS := NULL;
  RECORDDATETYPE := 'D';
  BEGINDATE := NULL;
  ENDDATE := NULL;
  AUDITNUMBER := NULL;
  AUDITTYPESLIST := NULL;
  EX_AUDITTYPES := NULL;
  SAVINGSGREATERTHANZERO := NULL;
  APPEALDECSLIST := NULL;
  EX_APPEALDECS := NULL;
  REVIEWERSLIST := NULL;
  EX_REVIEWERS := NULL;
  DISPCODESLIST := NULL;
  EX_DISPCODES := NULL;
  GROSSNETCHK := 'Gross';
  IDENTCONFCHK := 'Ident';
  ORDERBYCOMBO := NULL;
  RECORDDATETYPE2 := 'A';
  BEGINDATE2 := NULL;
  ENDDATE2 := NULL;
  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');   EDITCODESLIST := NULL;
  EX_EDITCODES := NULL;
  DRGCODESLIST := NULL;
  EX_DRGCODES := NULL;
  DIAGCODESLIST := NULL;
  EX_DIAGCODES := NULL;
  PROCCODESLIST := NULL;
  EX_PROCCODES := NULL;
  CLIENTID := '1';      INSERT INTO cas.RPTACTIVITY

            (vclistuser, sortid1, vcnumber, vcprovidername, dtdischargedate,

             rcoveredcharges, sidrg, sinewdrg, ractualpay, vcreviewername,

             savings)
   SELECT CURRENTUSERID, --!!Here

          DECODE (

'1',
'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), --!!Here ( u.vclastname || ' ' || u.vcfirstname ), DECODE ( GrossNetChk||IdentConfChk, --!!Here
'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 r.iauditnumber = ac.iauditnumber)
      AND (u.vcuserid = r.vcauditorid AND u.vcclientid = CLIENTID)
      AND (ac.iauditnumber = a.iauditnumber AND 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 a.dtclosedate BETWEEN
TO_DATE('01/01/1900','MM/DD/YYYY') AND
TO_DATE('01/01/2000','MM/DD/YYYY') ) --!!Here and below

           OR ( RecordDateType = 'A' AND r.dtadmitdate BETWEEN TO_DATE('01/01/1900','MM/DD/YYYY') AND
TO_DATE('01/01/2000','MM/DD/YYYY') )
           OR ( RecordDateType = 'D' AND r.dtdischargedate BETWEEN TO_DATE('01/01/1900','MM/DD/YYYY') AND
TO_DATE('01/01/2000','MM/DD/YYYY') )
           OR ( RecordDateType = 'R' AND r.dtcreateddate BETWEEN TO_DATE('01/01/1900','MM/DD/YYYY') AND
TO_DATE('01/01/2000','MM/DD/YYYY') )
           OR ( RecordDateType = 'M' AND o.dtadjustmentmadedate BETWEEN TO_DATE('01/01/1900','MM/DD/YYYY') AND TO_DATE('01/01/2000','MM/DD/YYYY') )
           OR ( RecordDateType = 'Q' AND o.dtadjustmentrequestdate BETWEEN TO_DATE('01/01/1900','MM/DD/YYYY') AND TO_DATE('01/01/2000','MM/DD/YYYY') )

          )
      AND (   ( RecordDateType2 = 'C' AND a.dtclosedate BETWEEN
TO_DATE('01/01/1900','MM/DD/YYYY') AND
TO_DATE('01/01/2000','MM/DD/YYYY') )
           OR ( RecordDateType2 = 'A' AND r.dtadmitdate BETWEEN TO_DATE('01/01/1900','MM/DD/YYYY') AND
TO_DATE('01/01/2000','MM/DD/YYYY') )
           OR ( RecordDateType2 = 'D' AND r.dtdischargedate BETWEEN TO_DATE('01/01/1900','MM/DD/YYYY') AND
TO_DATE('01/01/2000','MM/DD/YYYY') )
           OR ( RecordDateType2 = 'R' AND r.dtcreateddate BETWEEN TO_DATE('01/01/1900','MM/DD/YYYY') AND
TO_DATE('01/01/2000','MM/DD/YYYY') )
           OR ( RecordDateType2 = 'M' AND o.dtadjustmentmadedate BETWEEN TO_DATE('01/01/1900','MM/DD/YYYY') AND TO_DATE('01/01/2000','MM/DD/YYYY') )
           OR ( RecordDateType2 = 'Q' AND o.dtadjustmentrequestdate BETWEEN TO_DATE('01/01/1900','MM/DD/YYYY') AND TO_DATE('01/01/2000','MM/DD/YYYY') )
          )
      AND (   NULL IS NULL
           OR     NULL IS NOT NULL
              AND DECODE (
                        'GrossIdent',
                     'GrossIdent',   r.rgrosspay
                                   - o.rnewgrosspay,
                     'GrossConf',   r.rgrosspay
                                  - o.rauditedgrosspay,
                     'NetIdent',   r.rnetpay
                                 - o.rnewnetpay,
                     'NetConf',   r.rnetpay
                                - o.rauditednetpay
                  ) > 0.0
          );

Counter := SQL%ROWCOUNT;
DBMS_OUTPUT.PUT_LINE(Counter);                   

COMMIT;
END; Thanks for any help.

"Sybrand Bakker" <postbus_at_sybrandb.demon.nl> wrote in message news:<ub97bg51rhb911_at_corp.supernews.com>...

> "JGP" <deja_at_chothu.mailshell.com> wrote in message
> news:1e9cd49d.0204101107.486f31fb_at_posting.google.com...
> > Hi,
> >
> > I've run into a frustrating problem and I just can't seem to find a
> > solution. I have a function which has a fairly complicated Insert
> > statement. When I compile and execte the function with parameters, it
> > takes about 5-10 mins and the oracle machine CPU becomes extremely
> > loaded. When I directly run the Insert statement which was in the
> > function, it does it much faster within 30 secs. Can someone please
> > help. Thanks.
> >
> > JGP
> 
> If you want help please don't be intentionally vague and post the source of
> your procedure. Crystal balls are not being sold here
> 
> Regards
Received on Thu Apr 11 2002 - 11:05:54 CDT

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US