Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Tuning of a stored oracle procedure
Hi! Everybody,
This is a procedure which i want to tune. Presently it takes 10 minutes for execution. The required indexes are in place.
Any suggestions ???
Thanks in advance.
PROCEDURE OpenCursor IS
customer_acct TEMP_ACCOUNT.ACCT_ICN%TYPE; splinter_acct TEMP_ACCOUNT.ACCT_ICN%TYPE; customer_rec AUTHORIZE%ROWTYPE; CURSOR AUTHORIZE_TEMP_CURSOR (xaact_icn AUTHORIZE.ACCT_ICN%TYPE) IS SELECT * FROM AUTHORIZE WHERE ACCT_ICN = xaact_icn; CURSOR AUTHORIZE_OLD (xaact_icn AUTHORIZE.ACCT_ICN%TYPE) IS SELECT * FROM AUTHORIZE WHERE ACCT_ICN = xaact_icn AND AUTH_CODE IN (1,2); CURSOR TEMP_PROD_CURSOR IS SELECT DISTINCT PARENT_ICN FROM ENUMPH WHERE HIER_ICN = 3 AND PARENT_LVL IN (3,4) AND CHILD_LVL = 5 AND CHILD_ICN IN (SELECT DISTINCT PROD_ICN FROM TEMP_AUTHORIZE WHERE AUTH_CODE IN (1,2));
CURSOR TEMP_ACCOUNT_ENUMAH (xaact_icn AUTHORIZE.ACCT_ICN%TYPE) IS SELECT ACCT_ICN, ADD_UPDATE_FLAG, CHILD_LVL FROM ENUMAH E, TEMP_ACCOUNT A WHERE
A.PROCESS_ID = CommonGlobalPackage.Process_ID AND A.UPPER_LEVEL = CommonGlobalPackage.FALSE_FLAG AND A.ACCT_ICN = E.CHILD_ICN AND E.PARENT_ICN = xaact_icn AND E.HIER_ICN = 2; CURSOR TEMP_ACCOUNT_CURSOR IS SELECT * FROM TEMP_ACCOUNT WHERE PROCESS_ID = CommonGlobalPackage.Process_ID AND UPPER_LEVEL = CommonGlobalPackage.FALSE_FLAG;/* do not include nohist*/
SELECT ACCT_ICN FROM ACCTHIER A,TEMP_ACCOUNT B WHERE B.ACCT_ICN = A.CHILD_ICN AND A.HIER_ICN = 2 AND A.CHILD_LVL IN (7, 8) AND B.PROCESS_ID = CommonGlobalPackage.Process_ID AND B.UPPER_LEVEL in (CommonGlobalPackage.TRUE_FLAG, CommonGlobalPackage.FALSE_FLAG) ORDER BY A.CHILD_LVL DESC;
commit; DELETE FROM TEMP_AUTHORIZE WHERE PROCESS_ID = CommonGlobalPackage.Process_ID; COMMIT; SELECT COUNT(*) INTO rec_count FROM TEMP_ACCOUNT WHERE ADD_UPDATE_FLAG > 0 AND PROCESS_ID = CommonGlobalPackage.Process_ID AND UPPER_LEVEL = CommonGlobalPackage.TRUE_FLAG; insert into adebug values('in here before for'||to_char
(sysdate,'mm/dd/yyyy hh24:mi:ss'));
commit; /* update from authorize*/ FOR CA IN CUSTOMER_ACCT_C LOOP /*start customer loop*/ customer_acct := CA.ACCT_ICN; FOR TAA IN TEMP_ACCOUNT_ENUMAH (customer_acct) LOOP /* loop2*/ FOR AC IN AUTHORIZE_TEMP_CURSOR (customer_acct) LOOP /* loop3*/ rec_count := 0; IF TAA.CHILD_LVL = 8 THEN SELECT COUNT(*) INTO rec_count FROM AUTHORIZE WHERE ACCT_ICN = TAA.ACCT_ICN AND PROD_ICN = AC.PROD_ICN; END IF; IF rec_count = 0 THEN BEGIN INSERT INTO TEMP_AUTHORIZE ( PROCESS_ID,
ACCT_ICN, PROD_ICN, BEGIN_DATE, END_DATE, CUST_ORDER_NBR, PROD_STATUS, AUTHORIZED, CBT_SHARE_OBJ, PLANOGRAM, DIST_RATING_EXC, DIST_RATING_GOOD, UNTIL_DATE, AUTH_CODE, STD_ITEM_CODE, CASE_PROD_KEY, PACKAGE_CSE_QTY, SPACE_GUIDE_ICN,
NEILSON_RANK_ICN, PROFIT_MARGIN, BRACKET_1,
DELETED_FLAG, ECHO_FLAG, UPDATE_DATE_TIME, UPDATE_EMP_ICN )
VALUES ( CommonGlobalPackage.Process_ID, TAA.ACCT_ICN, AC.PROD_ICN,
AC.BEGIN_DATE, AC.END_DATE, AC.CUST_ORDER_NBR, AC.PROD_STATUS, AC.AUTHORIZED, AC.CBT_SHARE_OBJ, AC.PLANOGRAM, AC.DIST_RATING_EXC, AC.DIST_RATING_GOOD, AC.UNTIL_DATE, AC.AUTH_CODE, AC.STD_ITEM_CODE, AC.CASE_PROD_KEY, AC.PACKAGE_CSE_QTY, AC.SPACE_GUIDE_ICN,
AC.NEILSON_RANK_ICN, AC.PROFIT_MARGIN, AC.BRACKET_1, AC.DELETED_FLAG, AC.ECHO_FLAG, AC.UPDATE_DATE_TIME, AC.UPDATE_EMP_ICN); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN /* this is dummy statement to handle exception*/ rec_count := 0; END; END IF; END LOOP;/*end loop 3*/ /* there are newly added accounts for which old auth records are needed*/ IF TAA.ADD_UPDATE_FLAG > 0 THEN FOR AO IN AUTHORIZE_OLD (customer_acct) LOOP /* loop4*/ rec_count := 0; IF TAA.CHILD_LVL = 8 THEN SELECT COUNT(*) INTO rec_count FROM AUTHORIZE WHERE ACCT_ICN = TAA.ACCT_ICN AND PROD_ICN = AO.PROD_ICN; END IF; IF rec_count = 0 THEN BEGIN INSERT INTO TEMP_AUTHORIZE ( PROCESS_ID,
ACCT_ICN, PROD_ICN, BEGIN_DATE, END_DATE, CUST_ORDER_NBR, PROD_STATUS, AUTHORIZED, CBT_SHARE_OBJ, PLANOGRAM, DIST_RATING_EXC, DIST_RATING_GOOD, UNTIL_DATE, AUTH_CODE, STD_ITEM_CODE, CASE_PROD_KEY, PACKAGE_CSE_QTY, SPACE_GUIDE_ICN,
NEILSON_RANK_ICN, PROFIT_MARGIN, BRACKET_1,
DELETED_FLAG, ECHO_FLAG, UPDATE_DATE_TIME, UPDATE_EMP_ICN )
VALUES ( CommonGlobalPackage.Process_ID, TAA.ACCT_ICN, AO.PROD_ICN,
AO.BEGIN_DATE, AO.END_DATE, AO.CUST_ORDER_NBR, AO.PROD_STATUS, AO.AUTHORIZED, AO.CBT_SHARE_OBJ, AO.PLANOGRAM, AO.DIST_RATING_EXC, AO.DIST_RATING_GOOD, AO.UNTIL_DATE, AO.AUTH_CODE, AO.STD_ITEM_CODE, AO.CASE_PROD_KEY, AO.PACKAGE_CSE_QTY, AO.SPACE_GUIDE_ICN,
AO.NEILSON_RANK_ICN, AO.PROFIT_MARGIN, AO.BRACKET_1, AO.DELETED_FLAG, AO.ECHO_FLAG, AO.UPDATE_DATE_TIME, AO.UPDATE_EMP_ICN); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN /* this is dummy statement to handle exception*/ rec_count := 0; END; ELSE BEGIN INSERT INTO TEMP_AUTHORIZE SELECT CommonGlobalPackage.Process_ID, AUTHORIZE.* FROM AUTHORIZE WHERE ACCT_ICN = TAA.ACCT_ICN AND PROD_ICN = AO.PROD_ICN; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN /* this is dummy statement to handle exception*/ rec_count := 0; END; END IF; END LOOP;/* end loop4*/ END IF; END LOOP;/* end loop2*/
commit; FOR EP IN TEMP_PROD_CURSOR LOOP BEGIN SELECT EFD_ICN INTO xspace_guide_icn FROM SPACE_GUIDE_TABLE WHERE PROD_ICN = EP.PARENT_ICN; EXCEPTION WHEN NO_DATA_FOUND THEN xspace_guide_icn := NULL; END; FOR TA IN TEMP_ACCOUNT_CURSOR LOOP rec_count := 0; /* check if it exists*/ SELECT COUNT(*) INTO rec_count FROM AUTHORIZE WHERE ACCT_ICN = TA.ACCT_ICN AND PROD_ICN = EP.PARENT_ICN; IF rec_count = 0 THEN BEGIN INSERT INTO TEMP_AUTHORIZE ( PROCESS_ID, ACCT_ICN, PROD_ICN, BEGIN_DATE, PROD_STATUS, END_DATE,
AUTHORIZED,
AUTH_CODE, SPACE_GUIDE_ICN, DELETED_FLAG, ECHO_FLAG, UPDATE_DATE_TIME, UPDATE_EMP_ICN ) VALUES ( CommonGlobalPackage.Process_ID, TA.ACCT_ICN, EP.PARENT_ICN, TO_DATE ('01/01/1996','MM/DD/YYYY'), '', TO_DATE ('12/31/2099','MM/DD/YYYY'), 'YES', 1, xspace_guide_icn, 0, 0, SYSDATE, .000002); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN /* this is dummy statement to handle exception*/ rec_count := 0; END; END IF; END LOOP; END LOOP; insert into adebug values('out of prod2 loop'||to_char
(sysdate,'mm/dd/yyyy hh24:mi:ss'));
commit; COMMIT; OPEN DOWNLOAD_CURSOR; insert into adebug values('opened download cursor'||to_char
(sysdate,'mm/dd/yyyy hh24:mi:ss'));
commit; EXCEPTION WHEN OTHERS THEN CommonGlobalPackage.Err_Msg := SUBSTR(SQLERRM, 1, 80); CommonGlobalPackage.Err_Num := SQLCODE; Help_DeskPackage.AddBackendRecord ('E', 140042, CommonGlobalPackage.Err_Msg, CommonGlobalPackage.Err_Num, 'ACCOUNT' ); RAISE;
-----------== Posted via Deja News, The Discussion Network ==---------- http://www.dejanews.com/ Search, Read, Discuss, or Start Your Own Received on Fri Oct 02 1998 - 10:20:48 CDT