Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.server -> Re: performance tuning of stored procedure
Sorry if Google mangles the format....
Here is a version with only a single LOOP, I think it does the same thing...
...
FOR crec IN (SELECT ROWNUM AS rowno, recnum
,TRIM (BOTH FROM carrier_id) carrier_id
,TRIM (BOTH FROM account_id) account_id
,TRIM (BOTH FROM GROUP_ID) GROUP_ID
,TRIM (BOTH FROM effective_date) effective_date
,TRIM (BOTH FROM trm_date) trm_date
FROM rxclaim_output WHERE recnum IN (--- ---) AND file_key = infilekey AND sub_file_key = insubfilekey ORDER BY family_id, dob, first_name, middle_name) LOOP /*new ?better? code to eliminate nested loop*/ IF crec.rowno = 1 THEN vfirstrecnum := crec.recnum; vfirstcarrierid := crec.carrier_id; vfirstaccountid := crec.account_id; vfirstgroupid := crec.GROUP_ID; vfirsteffdt := crec.effective_date; vfirsttrmdt := crec.trm_date; END IF; IF crec.rowno > 1 THEN /***remove uneeded sub-select-loop FOR csubrec IN (SELECT ROWNUM AS rowno, recnum ,TRIM (BOTH FROM carrier_id) carrier_id ,TRIM (BOTH FROM account_id) account_id ,TRIM (BOTH FROM GROUP_ID) GROUP_ID ,TRIM (BOTH FROM effective_date) effective_date ,TRIM (BOTH FROM trm_date) trm_date FROM rxclaim_output WHERE recnum IN (SELECT * FROM DUAL --- --- ) AND file_key = infilekey AND sub_file_key = insubfilekey AND recnum <> vfirstrecnum ORDER BY family_id, dob, first_name, middle_name) LOOP***/ vsecondrecnum := crec.recnum; vsecondcarrierid := crec.carrier_id; vsecondaccountid := crec.account_id; vsecondgroupid := crec.GROUP_ID; vsecondeffdt := crec.effective_date; vsecondtrmdt := crec.trm_date; /**could use the crec.* instead of assigning to temp vars but i'll leave that as an exercise for the reader 9^)**/ IF ( (vfirstcarrierid <> vsecondcarrierid) OR (vfirstaccountid <> vsecondaccountid) OR (vfirstgroupid <> vsecondgroupid) OR (vfirsteffdt <> vsecondeffdt) OR (vfirsttrmdt <> vsecondtrmdt) ) THEN UPDATE rxclaim_output SET mult_birth_calc = 0 WHERE recnum = vfirstrecnum; UPDATE rxclaim_output SET mult_birth_calc = 0 WHERE recnum = vsecondrecnum; COMMIT; END IF; END IF;
Of course I haven't execurted it so caveat emptor
Cheers Received on Fri Sep 01 2006 - 11:05:57 CDT
![]() |
![]() |