CREATE OR REPLACE PROCEDURE INCLUI_MSGPADRAO_BANCO
  (P_CDBANCCNAB IN VARCHAR2) IS

   V_BCCADASTRADO BANCO.CDBANCO%TYPE;
   V_MSGCADASTRADA NUMBER;

BEGIN
   BEGIN
      SELECT COUNT(*)
        INTO V_BCCADASTRADO
        FROM BANCO
       WHERE CDBANCCNAB = P_CDBANCCNAB;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_BCCADASTRADO := NULL;
   END;

   IF NOT V_BCCADASTRADO IS NULL THEN

      DELETE FROM ERRCNABP
       WHERE CDBANCO = P_CDBANCCNAB;

      DELETE FROM ERRCNABR
       WHERE CDBANCO = P_CDBANCCNAB;

      FOR MSGAUTO IN (
         SELECT CDBANCO, CDMENSAGEM, DESCRICAO, IDTIPOMSG
           FROM MSGPADRAOBANCO
          WHERE CDBANCO = P_CDBANCCNAB
         ) LOOP

         IF MSGAUTO.IDTIPOMSG = 'P' THEN
            INSERT INTO ERRCNABP
               (CDBANCO, CDERRCNABP, DSERRCNABP)
            VALUES
               (MSGAUTO.CDBANCO, MSGAUTO.CDMENSAGEM, MSGAUTO.DESCRICAO);
         END IF;

         IF MSGAUTO.IDTIPOMSG = 'C' THEN
            INSERT INTO ERRCNABR
               (CDBANCO, CDERRCNABR, DSERRCNABR)
            VALUES
               (MSGAUTO.CDBANCO, MSGAUTO.CDMENSAGEM, MSGAUTO.DESCRICAO);
         END IF;

         IF MSGAUTO.IDTIPOMSG = 'I' THEN
            BEGIN
               SELECT COUNT(*)
                 INTO V_MSGCADASTRADA
                 FROM INSTCOBRANCA
                WHERE CDBANCO = MSGAUTO.CDBANCO
                  AND CDINSTCOBR = MSGAUTO.CDMENSAGEM;
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_MSGCADASTRADA := NULL;
            END;

            IF V_MSGCADASTRADA > 0 THEN
               UPDATE INSTCOBRANCA
                  SET NMINSTCOBR = MSGAUTO.DESCRICAO
                WHERE CDBANCO = MSGAUTO.CDBANCO
                  AND CDINSTCOBR = MSGAUTO.CDMENSAGEM;
            ELSE
               INSERT INTO INSTCOBRANCA
                  (CDBANCO, CDINSTCOBR, NMINSTCOBR)
               VALUES
                  (MSGAUTO.CDBANCO, MSGAUTO.CDMENSAGEM, MSGAUTO.DESCRICAO);
            END IF;
         END IF;
      END LOOP;
   END IF;
END;
/