Você deve revisar todos os comandos RAISE que causam exceções pré-definidas, porque normalmente esse é um sinal de lógica ruim. Considere esse exemplo:

    CREATE OR REPLACE FUNCTION grupo_tem_usuario(id IN NUMBER) RETURN BOOLEAN IS
      tem_usuario BOOLEAN;
      usuario_id  usuario_grupo.usuario_id%TYPE;
    BEGIN
      BEGIN
        SELECT usuario_grupo.usuario_id
          INTO grupo_id
          FROM usuario_grupo
         WHERE usuario_grupo.grupo_id = id;

        RAISE TOO_MANY_ROWS;
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          tem_usuario := FALSE;
        WHEN TOO_MANY_ROWS THEN
          tem_usuario := TRUE;
      END;

      RETURN tem_usuario;
    END;

Nesse caso, a exceção TOO_MANY_ROWS está sendo usada como mecanismo de controle de fluxo. Essa função poderia ser reescrita para evitar o comando RAISE:

    CREATE OR REPLACE FUNCTION grupo_tem_usuario(id IN NUMBER) RETURN BOOLEAN IS
      numero_de_usuarios NUMBER;
    BEGIN
      BEGIN
        SELECT COUNT(*)
          INTO numero_de_usuarios
          FROM usuario_grupo
         WHERE usuario_grupo.grupo_id = id;
      EXCEPTION
        WHEN OTHERS THEN
          numero_de_usuarios := 0;
      END;

      RETURN numero_de_usuarios > 0;
    END;