CREATE OR REPLACE PROCEDURE COPIA_SUBGRU_SERV_MENU_GRID
(
  P_CDFILIPROC IN VARCHAR2,
  P_CDFILIALORI IN VARCHAR2,
  P_CDCIAORI IN VARCHAR2,
  P_CDMANCIAORI IN VARCHAR2,
  P_NRSERVICOCIAFILIORI IN NUMBER,
  P_CDCLASSEORI IN VARCHAR2,
  P_NRLISTASUBGRUORI IN VARCHAR2,
  P_LISTACICLOS IN VARCHAR2,
  P_CDFILIALDES IN VARCHAR2,
  P_CDCIADES IN VARCHAR2,
  P_CDMANCIADES IN VARCHAR2,
  P_NRSERVICOCIAFILIDES IN NUMBER,
  P_CDCLASSEDES IN VARCHAR2,
  P_IMAGEMDEFAULT IN VARCHAR2,
  P_COPIA_IMAGEM IN VARCHAR2,
  P_SOBRESCREVER IN VARCHAR2,
  P_COPIA_PRODCIA IN VARCHAR2,
  P_COPIA_IT IN VARCHAR2,
  P_CDOPERADOR IN VARCHAR2,
  P_DTINIVGSUMADES IN DATE,
  P_DTFIMVGSUMADES IN DATE,
  P_IDALTERAAPROVADO IN VARCHAR2,
  P_NRORG IN NUMBER DEFAULT 1,
  P_NRLISTAERROS OUT NUMBER
)
AS
   V_SEQ VARCHAR2(20);
   V_MSGERRO VARCHAR2(2000);   
   V_DTINIVGMA DATE;
   V_DTFIMVGMA DATE;
   V_IDSITUAPROPCIA VARCHAR2(30);
   V_DSCLASSE VARCHAR2(30);
   V_EXISTE_SUBGRU NUMBER;
   V_EXISTE_SUBGRUPRI NUMBER;
   V_NRSEQSUBGRUSEMAM NUMBER;
   V_NRLISTA_DE_PARA NUMBER;
   V_EXISTE_PRODUTOCIA NUMBER;
   V_ORDEM NUMBER;
   V_CDSUBGRUDES VARCHAR2(20);
   V_CDSUBGRUPRIDES VARCHAR2(20);
   V_SUBGRUPRI_JA_CAD NUMBER;

   FUNCTION RETORNA_SUBGRUPO(P_CDSUBGRU VARCHAR2) RETURN VARCHAR2
   AS
      V_DSSUBGRU VARCHAR2(2000);
      V_CDSUBGRU VARCHAR2(20);
   BEGIN
      SELECT MAX(DSSUBGRU)
        INTO V_DSSUBGRU
        FROM SUBGRUPOM
       WHERE CDSUBGRU = P_CDSUBGRU;

      /*Verifica se existe ja existe o subgrupo no servico de destino*/
      SELECT MAX(S.CDSUBGRU)
        INTO V_CDSUBGRU
        FROM SUBGRUSEMAM S
             INNER JOIN SUBGRUPOM SG ON SG.CDSUBGRU = S.CDSUBGRU
       WHERE S.CDFILIAL = P_CDFILIALDES
         AND S.CDCIA = P_CDCIADES
         AND S.CDMANCIA = P_CDMANCIADES
         AND S.NRSERVICOCIAFILI = P_NRSERVICOCIAFILIDES
         AND S.CDCLASSE = P_CDCLASSEDES
         AND SG.DSSUBGRU = V_DSSUBGRU;

      IF V_CDSUBGRU IS NOT NULL THEN
         RETURN V_CDSUBGRU;
      END IF;

      RETURN P_CDSUBGRU;
   END;

BEGIN
  IF P_CDFILIALORI = P_CDFILIALDES AND
     P_CDCIAORI = P_CDCIADES AND
     P_CDMANCIAORI = P_CDMANCIADES AND
     P_NRSERVICOCIAFILIORI = P_NRSERVICOCIAFILIDES AND
     P_CDCLASSEORI = P_CDCLASSEDES AND 
     P_IDALTERAAPROVADO <> 'S' THEN
     RETURN;
  END IF;
   /*
  Verifica se o status do manual de destino
  */
  SELECT MAX(IDSITUAPROPCIA)
    INTO V_IDSITUAPROPCIA
    FROM MANUALCIAM
   WHERE CDFILIAL = P_CDFILIALDES
     AND CDCIA = P_CDCIADES
     AND CDMANCIA = P_CDMANCIADES;

  /*Operacao bloqueada. Manual de destino ja esta em proposta ou aprovado.*/
  IF V_IDSITUAPROPCIA NOT IN ('E', 'A') THEN
     IF P_IDALTERAAPROVADO <> 'S' THEN
        RAISE_APPLICATION_ERROR(-20501, 'APPERRMSGSTR' || 'APP-00046' || 'APPERRMSGEND' , TRUE);
     END IF;
  END IF;

   /* VERIFICA SE CICLOS NO DESTINO ESTAO OK */
   P_NRLISTAERROS := NULL;

   IF P_NRLISTAERROS IS NOT NULL THEN      
      RETURN;
   END IF;

  SELECT MAX(M.DTINIVGMA), MAX(M.DTFIMVGMA)
    INTO V_DTINIVGMA, V_DTFIMVGMA
    FROM MANUALCIAM M
   WHERE M.CDFILIAL = P_CDFILIALDES
     AND M.CDCIA = P_CDCIADES
     AND M.CDMANCIA = P_CDMANCIADES;

  V_DTINIVGMA := NVL(P_DTINIVGSUMADES, V_DTINIVGMA);
  V_DTFIMVGMA := NVL(P_DTFIMVGSUMADES, V_DTFIMVGMA);


  /*APAGA OS SUBGRUPOS DO DESTINO QUE SERAO SOBRESCRITOS*/
  IF P_SOBRESCREVER = 'S' THEN
    FOR CUR_SUB IN
     (SELECT S.NRSERVICOCIAFILI, P_NRSERVICOCIAFILIDES AS NRSERVICOCIAFILIDES, S.CDCLASSE, P_CDCLASSEDES AS CDCLASSEDES, S.CDSUBGRU,
             S.NRSEQSUBGRUSEMAM, S.DTINIVGSUMA, S.DTFIMVGSUMA, S.IDPROPSUBSEMAM,
             S.QTPROPSUBSEMAM, S.NRORDSUBGRUSEMAM,
             ROW_NUMBER() OVER (PARTITION BY S.CDFILIAL, S.CDCIA, S.CDMANCIA, S.NRSERVICOCIAFILI, S.CDCLASSE, S.CDSUBGRU
                          ORDER BY S.CDFILIAL, S.CDCIA, S.CDMANCIA, S.NRSERVICOCIAFILI, S.CDCLASSE, S.CDSUBGRU, S.NRSEQSUBGRUSEMAM) AS ORDEM
        FROM SUBGRUSEMAM S
             INNER JOIN LISTA L ON L.NRLISTA = P_NRLISTASUBGRUORI AND
                                   S.CDSUBGRU = SUBSTR(L.CDLISTA, 1, INSTR(L.CDLISTA, '|') - 1) AND
                                   S.NRSEQSUBGRUSEMAM = SUBSTR(L.CDLISTA, INSTR(L.CDLISTA, '|') + 1, 20)
       WHERE S.CDFILIAL = P_CDFILIALORI
         AND S.CDCIA    = P_CDCIAORI
         AND S.CDMANCIA = P_CDMANCIAORI
         AND S.NRSERVICOCIAFILI = P_NRSERVICOCIAFILIORI
         AND S.CDCLASSE = P_CDCLASSEORI      
         AND S.NRORG    = P_NRORG) LOOP
        
      V_CDSUBGRUDES := RETORNA_SUBGRUPO(CUR_SUB.CDSUBGRU);

      SELECT MAX(CDFILIAL)
        INTO V_EXISTE_SUBGRU
        FROM SUBGRUSEMAM SMD 
       WHERE SMD.CDFILIAL = P_CDFILIALDES
         AND SMD.CDCIA = P_CDCIADES
         AND SMD.CDMANCIA = P_CDMANCIADES
         AND SMD.NRSERVICOCIAFILI = P_NRSERVICOCIAFILIDES
         AND SMD.CDCLASSE = P_CDCLASSEDES
         AND SMD.CDSUBGRU = V_CDSUBGRUDES;
         
      IF V_EXISTE_SUBGRU IS NOT NULL THEN       
        FOR CUR_DEL IN 
        (SELECT NRSEQSUBGRUSEMAM
           FROM SUBGRUSEMAM SMD 
          WHERE SMD.CDFILIAL = P_CDFILIALDES
            AND SMD.CDCIA = P_CDCIADES
            AND SMD.CDMANCIA = P_CDMANCIADES
            AND SMD.NRSERVICOCIAFILI = P_NRSERVICOCIAFILIDES
            AND SMD.CDCLASSE = P_CDCLASSEDES
            AND SMD.CDSUBGRU = V_CDSUBGRUDES) LOOP
          /*Se for replicacao do subgrupo no mesmo servico, NAO EXCLUI SUBGRUPO (P_IDALTERAAPROVADO = 'S')*/
          IF P_CDFILIALORI = P_CDFILIALDES AND
             P_CDCIAORI = P_CDCIADES AND
             P_CDMANCIAORI = P_CDMANCIADES AND
             P_NRSERVICOCIAFILIORI = P_NRSERVICOCIAFILIDES AND
             P_CDCLASSEORI = P_CDCLASSEDES AND                                                    
             P_IDALTERAAPROVADO = 'S' THEN
             CONTINUE;
          END IF;

          EXCLUI_SUBGRUPO_MENUGRID(P_CDFILIALDES, P_CDCIADES, P_CDMANCIADES, 
                                   P_NRSERVICOCIAFILIDES, P_CDCLASSEDES, V_CDSUBGRUDES,
                                   CUR_DEL.NRSEQSUBGRUSEMAM, P_NRORG);
        END LOOP;       
      END IF;

    END LOOP;
  END IF;

  /* INSERE TODOS OS SUBGRUPOS DO MANUAL DE ORIGEM NO MANUAL DE DESTINO */

  /*TABELA AUXILIAR PARA FAZER O DE PARA DE CHAVES*/
  NOVO_CODIGO_NT('LISTAERROS'||P_CDFILIPROC, V_SEQ);
  V_NRLISTA_DE_PARA := TO_NUMBER(V_SEQ);

  FOR CUR_SUB IN
   (SELECT S.NRSERVICOCIAFILI, P_NRSERVICOCIAFILIDES AS NRSERVICOCIAFILIDES, S.CDCLASSE, P_CDCLASSEDES AS CDCLASSEDES, S.CDSUBGRU,
           S.NRSEQSUBGRUSEMAM, S.DTINIVGSUMA, S.DTFIMVGSUMA, S.IDPROPSUBSEMAM,
           S.QTPROPSUBSEMAM, S.NRORDSUBGRUSEMAM
      FROM SUBGRUSEMAM S
           INNER JOIN LISTA L ON L.NRLISTA = P_NRLISTASUBGRUORI AND
                                 S.CDSUBGRU = SUBSTR(L.CDLISTA, 1, INSTR(L.CDLISTA, '|') - 1) AND
                                 S.NRSEQSUBGRUSEMAM = SUBSTR(L.CDLISTA, INSTR(L.CDLISTA, '|') + 1, 20)
     WHERE S.CDFILIAL = P_CDFILIALORI
       AND S.CDCIA    = P_CDCIAORI
       AND S.CDMANCIA = P_CDMANCIAORI
       AND S.NRSERVICOCIAFILI = P_NRSERVICOCIAFILIORI
       AND S.CDCLASSE = P_CDCLASSEORI      
       AND S.NRORG    = P_NRORG
       AND NOT EXISTS (SELECT 1
                         FROM SUBGRUSEMAM SMD 
                        WHERE SMD.CDFILIAL = P_CDFILIALDES
                          AND SMD.CDCIA = P_CDCIADES
                          AND SMD.CDMANCIA = P_CDMANCIADES
                          AND SMD.NRSERVICOCIAFILI = P_NRSERVICOCIAFILIDES
                          AND SMD.CDCLASSE = P_CDCLASSEDES
                          AND SMD.CDSUBGRU = S.CDSUBGRU
                          AND P_IDALTERAAPROVADO <> 'S')) LOOP
    
    V_CDSUBGRUDES := RETORNA_SUBGRUPO(CUR_SUB.CDSUBGRU);

    NOVO_CODIGO_NT('SUBGRUSEMAM', V_SEQ);
    V_NRSEQSUBGRUSEMAM := TO_NUMBER(V_SEQ);

    INSERT INTO LISTAERROS (CDFILIAL, NRLISTA, DSERRO,
     NRORG, NRORGINCLUSAO, NRORGULTATU,
     CDOPERINCLUSAO, CDOPERULTATU,
     DTINCLUSAO, DTULTATU)
    VALUES
    (P_CDFILIPROC, V_NRLISTA_DE_PARA, CUR_SUB.CDSUBGRU || '|' || TO_CHAR(CUR_SUB.NRSEQSUBGRUSEMAM) || '_' || TO_CHAR(V_NRSEQSUBGRUSEMAM),
     P_NRORG, P_NRORG, P_NRORG,
     P_CDOPERADOR, P_CDOPERADOR,
     SYSDATE, SYSDATE);

    INSERT INTO SUBGRUSEMAM
       (CDFILIAL,CDCIA,CDMANCIA,NRSERVICOCIAFILI,CDCLASSE,CDSUBGRU,NRSEQSUBGRUSEMAM,
        DTINIVGSUMA,DTFIMVGSUMA,IDPROPSUBSEMAM,QTPROPSUBSEMAM,NRORDSUBGRUSEMAM, IDALTERAAPROVADO,
        NRORG, DTINCLUSAO, CDOPERINCLUSAO, DTULTATU, NRORGINCLUSAO, NRORGULTATU, CDOPERULTATU, IDATIVO)
    VALUES
       (P_CDFILIALDES,P_CDCIADES,P_CDMANCIADES,CUR_SUB.NRSERVICOCIAFILIDES, CUR_SUB.CDCLASSEDES, V_CDSUBGRUDES, V_NRSEQSUBGRUSEMAM,
        V_DTINIVGMA,V_DTFIMVGMA,CUR_SUB.IDPROPSUBSEMAM,CUR_SUB.QTPROPSUBSEMAM,CUR_SUB.NRORDSUBGRUSEMAM, P_IDALTERAAPROVADO,
        P_NRORG,SYSDATE,P_CDOPERADOR,SYSDATE,P_NRORG,P_NRORG,P_CDOPERADOR,'S');


    FOR CUR_PROP IN
    (SELECT QTPAXDE, QTPAXATE, QTSUBGRUPO
       FROM PROPSUBGRUSE
      WHERE CDFILIAL = P_CDFILIALORI
        AND CDCIA = P_CDCIAORI
        AND CDMANCIA = P_CDMANCIAORI
        AND NRSERVICOCIAFILI = CUR_SUB.NRSERVICOCIAFILI
        AND CDCLASSE = CUR_SUB.CDCLASSE
        AND CDSUBGRU = CUR_SUB.CDSUBGRU
        AND NRSEQSUBGRUSEMAM = CUR_SUB.NRSEQSUBGRUSEMAM 
        AND NRORG = P_NRORG) LOOP
     INSERT INTO PROPSUBGRUSE
     (CDFILIAL, CDCIA, CDMANCIA, NRSERVICOCIAFILI, CDCLASSE, 
      CDSUBGRU, NRSEQSUBGRUSEMAM, QTPAXDE, QTPAXATE, QTSUBGRUPO,
      NRORG, NRORGINCLUSAO, NRORGULTATU,
      CDOPERINCLUSAO, CDOPERULTATU,
      DTULTATU, DTINCLUSAO)
     VALUES
     (P_CDFILIALDES, P_CDCIADES, P_CDMANCIADES, CUR_SUB.NRSERVICOCIAFILIDES, CUR_SUB.CDCLASSEDES,
      V_CDSUBGRUDES, V_NRSEQSUBGRUSEMAM, CUR_PROP.QTPAXDE, CUR_PROP.QTPAXATE, CUR_PROP.QTSUBGRUPO,
      P_NRORG, P_NRORG, P_NRORG,
      P_CDOPERADOR, P_CDOPERADOR,
      SYSDATE, SYSDATE);
    END LOOP;

    /*Nao levar produtos da companhia (especifico para a companhia)*/
    IF P_COPIA_PRODCIA = 'S' THEN

      FOR CUR_PRODCIA IN
      (SELECT CDPRODUTO, QTPRODUTOCIA, NRORDEM
         FROM PROCIASUBSEMAM
        WHERE CDFILIAL = P_CDFILIALORI
          AND CDCIA = P_CDCIAORI
          AND CDMANCIA = P_CDMANCIAORI
          AND NRSERVICOCIAFILI = CUR_SUB.NRSERVICOCIAFILI
          AND CDCLASSE = CUR_SUB.CDCLASSE
          AND CDSUBGRU = CUR_SUB.CDSUBGRU
          AND NRSEQSUBGRUSEMAM = CUR_SUB.NRSEQSUBGRUSEMAM 
          AND NRORG = P_NRORG) LOOP

       SELECT COUNT(1)
         INTO V_EXISTE_PRODUTOCIA
         FROM PRODUTOCIA
        WHERE CDFILIAL = P_CDFILIALDES
          AND CDCIA = P_CDCIADES
          AND CDPRODUTO = CUR_PRODCIA.CDPRODUTO;

       IF V_EXISTE_PRODUTOCIA = 0 THEN
          INSERT INTO PRODUTOCIA
          (CDFILIAL, CDCIA, CDPRODUTO,
          NRORG, NRORGINCLUSAO, NRORGULTATU,
          CDOPERINCLUSAO, CDOPERULTATU,
          DTULTATU, DTINCLUSAO)
          VALUES
          (P_CDFILIALDES, P_CDCIADES, CUR_PRODCIA.CDPRODUTO,
          P_NRORG, P_NRORG, P_NRORG,
          P_CDOPERADOR, P_CDOPERADOR,
          SYSDATE, SYSDATE);
       END IF;

       INSERT INTO PROCIASUBSEMAM
       (CDFILIAL, CDCIA, CDMANCIA, NRSERVICOCIAFILI, CDCLASSE,
        CDSUBGRU, NRSEQSUBGRUSEMAM, 
        CDPRODUTO, QTPRODUTOCIA, NRORDEM,
        NRORG, NRORGINCLUSAO, NRORGULTATU,
        CDOPERINCLUSAO, CDOPERULTATU,
        DTULTATU, DTINCLUSAO)
       VALUES
       (P_CDFILIALDES, P_CDCIADES, P_CDMANCIADES, CUR_SUB.NRSERVICOCIAFILIDES, CUR_SUB.CDCLASSEDES,
        V_CDSUBGRUDES, V_NRSEQSUBGRUSEMAM,
        CUR_PRODCIA.CDPRODUTO, CUR_PRODCIA.QTPRODUTOCIA, CUR_PRODCIA.NRORDEM,
        P_NRORG, P_NRORG, P_NRORG,
        P_CDOPERADOR, P_CDOPERADOR,
        SYSDATE, SYSDATE);

      END LOOP;      

    END IF;

    /* INSERE TODOS OS CICLOS DO SUBGRUPO NA LISTA */
    FOR CUR_CICLO IN 
    (SELECT CDCICLO
       FROM CICLOSUBGRUSEMAM
      WHERE CDFILIAL = P_CDFILIALORI
        AND CDCIA = P_CDCIAORI
        AND CDMANCIA = P_CDMANCIAORI
        AND NRSERVICOCIAFILI = CUR_SUB.NRSERVICOCIAFILI
        AND CDCLASSE = CUR_SUB.CDCLASSE
        AND CDSUBGRU = CUR_SUB.CDSUBGRU
        AND NRSEQSUBGRUSEMAM = CUR_SUB.NRSEQSUBGRUSEMAM
        AND ((P_LISTACICLOS = 'TODOS') OR (INSTR(P_LISTACICLOS, CDCICLO) > 0))
        AND NRORG = P_NRORG
    ) LOOP       
       COPIA_COMPOSICAO_CICLO(P_CDFILIALORI, P_CDCIAORI, P_CDMANCIAORI, P_NRSERVICOCIAFILIORI,
                              P_CDCLASSEORI, CUR_SUB.CDSUBGRU, CUR_SUB.NRSEQSUBGRUSEMAM, CUR_CICLO.CDCICLO,
                              P_CDFILIALDES, P_CDCIADES, P_CDMANCIADES, P_NRSERVICOCIAFILIDES,
                              P_CDCLASSEDES, V_CDSUBGRUDES, V_NRSEQSUBGRUSEMAM,
                              CUR_CICLO.CDCICLO, P_IMAGEMDEFAULT, P_COPIA_IMAGEM, P_SOBRESCREVER,
                              P_COPIA_IT, P_CDOPERADOR, P_NRORG);

    END LOOP;

  END LOOP;

  FOR CUR_SUBGRUPRI IN
  (SELECT S.CDFILIAL, S.CDCIA, S.CDMANCIA, S.NRSERVICOCIAFILI, S.CDCLASSE, S.CDSUBGRU, S.NRSEQSUBGRUSEMAM, 
          S.CDCICLO, S.CDSUBGRUPRIN, S.NRSEQSUBGRUSEMAMPRIN
     FROM SUBGRUPRINCIPALMENU S
          INNER JOIN LISTA L ON L.NRLISTA = P_NRLISTASUBGRUORI AND
                                 S.CDSUBGRU = SUBSTR(L.CDLISTA, 1, INSTR(L.CDLISTA, '|') - 1) AND
                                 S.NRSEQSUBGRUSEMAM = SUBSTR(L.CDLISTA, INSTR(L.CDLISTA, '|') + 1, 20)          
    WHERE S.CDFILIAL = P_CDFILIALORI
      AND S.CDCIA    = P_CDCIAORI
      AND S.CDMANCIA = P_CDMANCIAORI
      AND S.NRSERVICOCIAFILI = P_NRSERVICOCIAFILIORI
      AND S.CDCLASSE = P_CDCLASSEORI
      AND ((P_LISTACICLOS = 'TODOS') OR (INSTR(P_LISTACICLOS, S.CDCICLO) > 0))
      AND S.NRORG = P_NRORG) LOOP

    SELECT MAX(DSERRO)
      INTO V_MSGERRO 
      FROM LISTAERROS
     WHERE CDFILIAL = P_CDFILIPROC
       AND NRLISTA = V_NRLISTA_DE_PARA
       AND DSERRO LIKE CUR_SUBGRUPRI.CDSUBGRU || '|' || TO_CHAR(CUR_SUBGRUPRI.NRSEQSUBGRUSEMAM) || '_%';
    
    V_NRSEQSUBGRUSEMAM := TO_NUMBER(REPLACE(V_MSGERRO, CUR_SUBGRUPRI.CDSUBGRU || '|' || TO_CHAR(CUR_SUBGRUPRI.NRSEQSUBGRUSEMAM) || '_', ''));

    V_CDSUBGRUDES := RETORNA_SUBGRUPO(CUR_SUBGRUPRI.CDSUBGRU);
    V_CDSUBGRUPRIDES := RETORNA_SUBGRUPO(CUR_SUBGRUPRI.CDSUBGRUPRIN);

    SELECT COUNT(1)
      INTO V_EXISTE_SUBGRU   
      FROM SUBGRUSEMAM
     WHERE CDFILIAL = P_CDFILIALDES
       AND CDCIA = P_CDCIADES
       AND CDMANCIA = P_CDMANCIADES
       AND NRSERVICOCIAFILI = P_NRSERVICOCIAFILIDES
       AND CDCLASSE = P_CDCLASSEDES
       AND CDSUBGRU = V_CDSUBGRUDES
       AND NRSEQSUBGRUSEMAM = V_NRSEQSUBGRUSEMAM;    
    
    SELECT MAX(NRSEQSUBGRUSEMAM)
      INTO V_EXISTE_SUBGRUPRI
      FROM CICLOSUBGRUSEMAM
     WHERE CDFILIAL = P_CDFILIALDES
       AND CDCIA = P_CDCIADES
       AND CDMANCIA = P_CDMANCIADES
       AND NRSERVICOCIAFILI = P_NRSERVICOCIAFILIDES
       AND CDCLASSE = P_CDCLASSEDES
       AND CDSUBGRU = V_CDSUBGRUPRIDES
       AND CDCICLO = CUR_SUBGRUPRI.CDCICLO;
    
    SELECT COUNT(1)    
      INTO V_SUBGRUPRI_JA_CAD
      FROM SUBGRUPRINCIPALMENU
     WHERE CDFILIAL = P_CDFILIALDES 
       AND CDCIA = P_CDCIADES
       AND CDMANCIA = P_CDMANCIADES
       AND NRSERVICOCIAFILI = P_NRSERVICOCIAFILIDES
       AND CDCLASSE = P_CDCLASSEDES
       AND CDSUBGRU = V_CDSUBGRUDES
       AND NRSEQSUBGRUSEMAM = V_NRSEQSUBGRUSEMAM
       AND CDCICLO = CUR_SUBGRUPRI.CDCICLO
       AND CDSUBGRUPRIN = V_CDSUBGRUPRIDES
       AND NRSEQSUBGRUSEMAMPRIN = V_EXISTE_SUBGRUPRI;

    IF V_EXISTE_SUBGRU > 0 AND
       V_EXISTE_SUBGRUPRI > 0 AND
       V_SUBGRUPRI_JA_CAD = 0 THEN

      INSERT INTO SUBGRUPRINCIPALMENU
      (CDFILIAL, CDCIA, CDMANCIA, NRSERVICOCIAFILI, CDCLASSE, CDSUBGRU, NRSEQSUBGRUSEMAM, CDCICLO,
       CDSUBGRUPRIN, NRSEQSUBGRUSEMAMPRIN, 
       NRORG, NRORGULTATU, NRORGINCLUSAO,
       CDOPERULTATU, CDOPERINCLUSAO,
       DTULTATU, DTINCLUSAO)
      VALUES
      (P_CDFILIALDES, P_CDCIADES, P_CDMANCIADES, P_NRSERVICOCIAFILIDES, P_CDCLASSEDES, V_CDSUBGRUDES, V_NRSEQSUBGRUSEMAM,
       CUR_SUBGRUPRI.CDCICLO, V_CDSUBGRUPRIDES, V_EXISTE_SUBGRUPRI,
       P_NRORG, P_NRORG, P_NRORG,
       P_CDOPERADOR, P_CDOPERADOR,
       SYSDATE, SYSDATE);

    END IF;
  END LOOP;

  DELETE FROM LISTAERROS
   WHERE CDFILIAL = P_CDFILIPROC
     AND NRLISTA = V_NRLISTA_DE_PARA;
END;
/