CREATE OR REPLACE FUNCTION RETORNA_VRRAZAOAUX(P_NRSEQCAPARAZAO NUMBER,
                                              P_NOMECAMPO IN VARCHAR,
                                              P_TIPO IN VARCHAR,
                                              P_CAMPO IN NUMBER) RETURN VARCHAR
AS
  V_RESULTADO VARCHAR2(100);
  V_VALOR NUMBER;
  FUNCTION NOME_ID(P_NOME IN VARCHAR) RETURN VARCHAR
  IS
     V_RETORNO VARCHAR2(50);
  BEGIN
     SELECT TABID.COLUMN_NAME
       INTO V_RETORNO
       FROM USER_TAB_COLUMNS TABID, USER_TAB_COLUMNS TABVR
      WHERE TABVR.TABLE_NAME = 'RAZAOAUXECD'
        AND TABVR.COLUMN_NAME = P_NOME
        AND TABID.TABLE_NAME = TABVR.TABLE_NAME
        AND TABID.COLUMN_ID = TABVR.COLUMN_ID + 1;
      RETURN V_RETORNO;
  END;
BEGIN
   IF P_TIPO = 'T' THEN
      EXECUTE IMMEDIATE ' SELECT NVL(SUM('||P_NOMECAMPO||' * DECODE('||NOME_ID(P_NOMECAMPO)||', '||''''||'D'||''''||', -1, 1)), 0) '||
                          ' FROM RAZAOAUXECD'||
                         ' WHERE NRSEQCAPARAZAO = '||TO_CHAR(P_NRSEQCAPARAZAO) INTO V_VALOR;
      IF SUBSTR(NOME_ID(P_NOMECAMPO), 1, 4) = 'IDDB' THEN
         SELECT REPLACE(LTRIM(TO_CHAR(ABS(NVL(V_VALOR,0)),'9999999999990.00')), '.', ',')||'|'||
                DECODE(V_VALOR, ABS(V_VALOR), 'C', 'D')
           INTO V_RESULTADO
           FROM DUAL;
      ELSE
         SELECT REPLACE(LTRIM(TO_CHAR(ABS(NVL(V_VALOR,0)),'9999999999990.00')), '.', ',')
           INTO V_RESULTADO
           FROM DUAL;
      END IF;
   ELSIF P_TIPO = 'A' THEN
      EXECUTE IMMEDIATE ' SELECT NVL(MAX('||P_NOMECAMPO||'), NULL) '||
                         ' FROM RAZAOAUXECD'||
                        ' WHERE NRSEQCAPARAZAO = '||TO_CHAR(P_NRSEQCAPARAZAO) INTO V_RESULTADO;
      IF SUBSTR(P_NOMECAMPO, 1, 2) = 'VR' THEN
         IF SUBSTR(NOME_ID(P_NOMECAMPO), 1, 4) = 'IDDB' THEN
            SELECT REPLACE(LTRIM(TO_CHAR(ABS(NVL(V_RESULTADO,0)),'9999999999990.00')), '.', ',')||'|'||
                   DECODE(V_RESULTADO, ABS(V_RESULTADO), 'C', 'D')
              INTO V_RESULTADO
              FROM DUAL;
         ELSE
            SELECT REPLACE(LTRIM(TO_CHAR(ABS(NVL(V_RESULTADO,0)),'9999999999990.00')), '.', ',')
              INTO V_RESULTADO
              FROM DUAL;
         END IF;
      END IF;
      IF P_NOMECAMPO = 'NRSEQSUBCONTA' THEN
         SELECT N.CDNATUCONT||'|'||C.CDCONTACORRE
           INTO V_RESULTADO
           FROM NATUCONTCORRE N, CONTCTBLCORRE C
          WHERE C.NRSEQUENCIAL = TO_NUMBER(V_RESULTADO)
            AND C.NRSEQNATU = N.NRSEQUENCIAL;
      END IF;
   END IF;
  RETURN V_RESULTADO;
END;
/