CREATE OR REPLACE PROCEDURE APURA_MELHOR_EQUALIZA (P_CDCENTCMP     IN EQUALFORNE.CDFILIAL%TYPE,
											       P_NREQUALFORNE  IN EQUALFORNE.NREQUALFORNE%TYPE,
											       P_IDMELHORPRECO  VARCHAR)
IS 
BEGIN

  UPDATE EQUALFORNE
     SET IDMELHORPREC = 'N' /* Desmarcando as equalizacoes ja feitas */
   WHERE EQUALFORNE.CDFILIAL = P_CDCENTCMP 
     AND EQUALFORNE.NREQUALFORNE  = P_NREQUALFORNE;
  COMMIT;

   /* Agrupa por regiao - APURA_MELHOR_COTACAO */
   FOR C_REGIAO IN (SELECT DISTINCT EQUALFORNE.CDREGIAO,
					                PRODUTO.CDPRODESTO,
					                EQUALFORNE.CDFILIAL
					           FROM PRODUTO,  EQUALFORNE
					          WHERE EQUALFORNE.CDFILIAL      = P_CDCENTCMP        
					            AND EQUALFORNE.NREQUALFORNE  = P_NREQUALFORNE        
					            AND EQUALFORNE.CDPRODUTO     = PRODUTO.CDPRODUTO)
   LOOP
      /* O primeiro registro tem o melhor preco  - APURA_MELHOR_COTACAO */
      FOR C_ITMEQUALIZA IN (SELECT EQUALFORNE.CDFILIAL,
							       EQUALFORNE.NREQUALFORNE,
							       EQUALFORNE.CDREGIAO,
							       EQUALFORNE.CDFORNECED,
							       EQUALFORNE.NRPEDIDOCOL,
							       EQUALFORNE.CDPRODUTO,
							       EQUALFORNE.CDMARCA,
							       PRODUTO.VRFATOCONV,
							       PRODUTO.VRARREDCMP,
							       EQUALFORNE.VRPRATUAL, 
							       EQUALFORNE.VRPRECECO, 
							       EQUALFORNE.VRPRECNEG,
							       EQUALFORNE.VRPRECPIPEDCOL
							  FROM PRODUTO, EQUALFORNE
							 WHERE EQUALFORNE.CDFILIAL     = P_CDCENTCMP                  
							   AND EQUALFORNE.NREQUALFORNE = P_NREQUALFORNE                  
							   AND EQUALFORNE.CDREGIAO     = C_REGIAO.CDREGIAO          
							   AND EQUALFORNE.CDPRODUTO    = PRODUTO.CDPRODUTO            
							   AND PRODUTO.CDPRODESTO      = C_REGIAO.CDPRODESTO          
							 ORDER BY CASE P_IDMELHORPRECO 
							             WHEN '1' THEN VRPRATUAL 
							             WHEN '2' THEN VRPRECECO
							             WHEN '3' THEN VRPRECPIPEDCOL
							             ELSE VRPRECNEG
							          END)
      LOOP
         /* Escolhendo primeiro registro*/
         UPDATE EQUALFORNE /* Escolhendo primeiro registro - APURA_MELHOR_COTACAO */
            SET IDMELHORPREC = 'S'
          WHERE CDFILIAL     = C_ITMEQUALIZA.CDFILIAL 
            AND NREQUALFORNE = C_ITMEQUALIZA.NREQUALFORNE  
            AND CDREGIAO     = C_ITMEQUALIZA.CDREGIAO  
            AND CDFORNECED   = C_ITMEQUALIZA.CDFORNECED 
            AND NRPEDIDOCOL  = C_ITMEQUALIZA.NRPEDIDOCOL  
            AND CDPRODUTO    = C_ITMEQUALIZA.CDPRODUTO 
            AND CDMARCA      = C_ITMEQUALIZA.CDMARCA;
            EXIT; /* Sai do Loop */
      END LOOP;
   END LOOP;
   COMMIT;
END;
/