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 -> Tuning of a stored oracle procedure

Tuning of a stored oracle procedure

From: <a_andy_at_my-dejanews.com>
Date: Fri, 02 Oct 1998 15:20:48 GMT
Message-ID: <6v2r0g$d2u$1@nnrp1.dejanews.com>


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*/
    CURSOR CUSTOMER_ACCT_C IS
         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;

   xspace_guide_icn TEMP_AUTHORIZE.SPACE_GUIDE_ICN%TYPE;    BEGIN
      insert into adebug values('in here before delete'||to_char
(sysdate,'mm/dd/yyyy hh24:mi:ss'));
      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*/

    END LOOP; /*end customer loop*/
    COMMIT;
      insert into adebug values('in here after 4 for'||to_char
(sysdate,'mm/dd/yyyy hh24:mi:ss'));
      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;

   END OpenCursor;

-----------== 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

Original text of this message

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