CREATE OR REPLACE TRIGGER CTRL_UNIDADE_OPER AFTER
   INSERT ON FILIAL
   FOR EACH ROW
DECLARE
   V_CDGRUPEMPR    VARCHAR2(03);
   V_CDOPERADOR    VARCHAR2(12);
   V_NEWEMPRESA    VARCHAR2(4);
   V_NEWCDFILIAL   VARCHAR2(4);
BEGIN
   V_NEWEMPRESA :=:NEW.CDEMPRESA;
   V_NEWCDFILIAL :=:NEW.CDFILIAL;

   BEGIN
      SELECT CDGRUPEMPR
        INTO V_CDGRUPEMPR
        FROM EMPRESA
       WHERE CDEMPRESA = V_NEWEMPRESA;

   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_CDGRUPEMPR := NULL;
   END;

   IF NOT V_CDGRUPEMPR IS NULL THEN
      FOR C_PERFIL IN (
         SELECT DISTINCT P.NRPERFILACESSO, F.CDOPERADOR
           FROM PERFACESSGREMPR P, PERFACESSFILI F
          WHERE P.CDGRUPEMPR = V_CDGRUPEMPR
            AND F.NRPERFILACESSO = P.NRPERFILACESSO)
      LOOP
         BEGIN
            SELECT CDOPERADOR
              INTO V_CDOPERADOR
              FROM FILIOPER
             WHERE CDOPERADOR = C_PERFIL.CDOPERADOR
               AND CDFILIAL = V_NEWCDFILIAL;
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_CDOPERADOR := NULL;
         END;

         IF V_CDOPERADOR IS NULL THEN
            INSERT INTO FILIOPER (CDOPERADOR, CDFILIAL)
            VALUES (C_PERFIL.CDOPERADOR, V_NEWCDFILIAL);
         END IF;

         INSERT INTO PERFACESSFILI (CDOPERADOR, CDFILIAL, NRPERFILACESSO)
         VALUES (C_PERFIL.CDOPERADOR, V_NEWCDFILIAL, C_PERFIL.NRPERFILACESSO);
      END LOOP;
   END IF;
END;
/