CREATE OR REPLACE FUNCTION VALOR_IMPOSTO_PEDIDO
   (P_CDFILIAL   IN PEDIDO.CDFILIAL%TYPE,
    P_NRPEDIDO   IN PEDIDO.NRPEDIDO%TYPE,
    P_IDTRATIMPO IN IMPOSTO.IDTRATIMPO%TYPE,
    P_CDIMPOSTO  IN IMPOSTO.CDIMPOSTO%TYPE DEFAULT NULL ) RETURN NUMBER
AS
   V_VRIMPOSTO IMPITEMPEDIDO.VRIMPOSTOITPED%TYPE;
BEGIN
   SELECT NVL(SUM(I.VRIMPOSTOITPED),0)
   INTO V_VRIMPOSTO
   FROM ITEMPEDIDO IT, IMPITEMPEDIDO I, IMPOSTO E
   WHERE IT.CDFILIAL  = P_CDFILIAL
     AND IT.NRPEDIDO  = P_NRPEDIDO
     AND IT.NRITEMPED = I.NRITEMPED
     AND IT.CDFILIAL = I.CDFILIAL
     AND IT.NRPEDIDO = I.NRPEDIDO
     AND I.CDIMPOSTO  = E.CDIMPOSTO
     AND E.IDTRATIMPO = P_IDTRATIMPO
     AND I.CDIMPOSTO  = NVL(P_CDIMPOSTO,I.CDIMPOSTO);

   RETURN(V_VRIMPOSTO);
END;
/