create or replace PROCEDURE LIMPEZA_DADOS_CDP(P_NRLISTA       IN VARCHAR2,
                                                      P_DTFINAL       IN DATE,
                                                      P_DSSISTLIMPEZ  IN VARCHAR2,
                                                      P_NMOPERLIMPEZ  IN VARCHAR2,
                                                      P_IDSISTEMA     IN VARCHAR2)
AS
V_ERR0R              VARCHAR2(2000);
V_PASSO              NUMBER := 0;
V_NRORDEM            VARCHAR2(03);
V_DSIP               VARCHAR2(50);
V_DSUSUARIO          VARCHAR2(50);
V_DSRDM              VARCHAR2(50);
V_DSMETODO           VARCHAR2(250);
V_DSOPERADOR         VARCHAR2(12);
V_COUNT_COMMIT       NUMBER := 1;
V_NUM_TO_COMMIT      NUMBER := 10; -- NUMERO UTILIZADO PARA REGULARIZAR A QUANTIDADE DE DML´S PARA O COMMIT.
V_CDFILIAL           VARCHAR2(4); 

V_EXCLULOTITRETIEST NUMBER := 0;
V_EXCLUITEMRETIEST  NUMBER := 0;
V_EXCLUPERDAOP      NUMBER := 0;
V_EXCLURECURETAPAOP NUMBER := 0;
V_EXCLUTAREFACHECKOP NUMBER := 0;
V_EXCLUAUDITORIA    NUMBER := 0;
V_EXCLUSUBPRETAPAOP NUMBER := 0;
V_EXCLURESERVEQUIPAPRO NUMBER := 0;
V_EXCLUPRODACABADO NUMBER := 0;
V_EXCLUORDPRODUCAO NUMBER := 0;
V_EXCLURETIRADAESTO NUMBER :=0;
V_EXCLUETAFABRICOP  NUMBER := 0;

V_CDOPERADOR         VARCHAR2(12);
V_DTHRFINLIMPEZA     DATE;

   CURSOR C_LISTA IS (SELECT CDFILIAL
                      FROM TRABLIMPFILIAL
                      WHERE IDLIMPEZA = P_IDSISTEMA);

   PROCEDURE VerifTimeOut(DTLIMITE IN DATE)
   IS
   BEGIN
      IF SYSDATE > DTLIMITE THEN
         COMMIT;
         RAISE_APPLICATION_ERROR(-20001,'TIMEOUT - EXCECAO PROPOSITAL TEKNISA');
      END IF;
   END;
BEGIN
   
   V_CDOPERADOR := NULL;
   SELECT MAX(CDOPERADOR)
     INTO V_CDOPERADOR
     FROM OPERADOR
    WHERE CDOPERADOR = '000000000999';

   IF V_CDOPERADOR IS NULL THEN
      SELECT MAX(CDOPERADOR)
        INTO V_CDOPERADOR
        FROM OPERADOR;
   END IF;

   DELETE FROM TRABPROCLIMPEZA
   WHERE IDLIMPEZA = P_IDSISTEMA;

   V_NRORDEM := '0';

   UPDATE TRABLIMPEZA
      SET IDSTATUSLIMPEZA = 'A'
    WHERE IDLIMPEZA = P_IDSISTEMA;

   --PEGA A DATA INICIAL E FINAL DA EXECUÇÃO
   SELECT TO_DATE(TO_CHAR(SYSDATE,'DDMMYYYY') || HRFINLIMPEZA||'00','DDMMYYYYHH24MISS')
     INTO V_DTHRFINLIMPEZA
     FROM TRABLIMPEZA
    WHERE IDLIMPEZA = P_IDSISTEMA;

   IF V_DTHRFINLIMPEZA <= SYSDATE THEN
      V_DTHRFINLIMPEZA := V_DTHRFINLIMPEZA + 1;
   END IF;

   COMMIT;
   
   WEBTUNNING(V_DSIP, V_DSUSUARIO, V_DSRDM, V_DSMETODO,  V_DSOPERADOR);

   V_NRORDEM := LPAD(TO_CHAR(TO_NUMBER(V_NRORDEM)+1), 3, '0');

   UPDATE TABLIMPEZA
      SET NRORDEMLIMPEZA = V_NRORDEM
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'ORDPRODUCAO';

   IF NOT(SQL%ROWCOUNT > 0) THEN
      INSERT INTO TABLIMPEZA
         (IDLIMPEZA, NMTABELALIMP, NRORDEMLIMPEZA)      
      VALUES
         (P_IDSISTEMA, 'ORDPRODUCAO', V_NRORDEM);
   END IF;

   INSERT INTO TRABPROCLIMPEZA
      (IDLIMPEZA, NMTABELALIMP)
   VALUES
      (P_IDSISTEMA, 'ORDPRODUCAO');
      
   BEGIN
      EXECUTE IMMEDIATE 'ALTER TRIGGER LOG_CDP_ORDPRODUCAO DISABLE';
   EXCEPTION
      WHEN OTHERS THEN NULL;
   END;

   V_NRORDEM := LPAD(TO_CHAR(TO_NUMBER(V_NRORDEM)+1), 3, '0');

   UPDATE TABLIMPEZA
      SET NRORDEMLIMPEZA = V_NRORDEM
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'PRODACABADO';

   IF NOT(SQL%ROWCOUNT > 0) THEN
      INSERT INTO TABLIMPEZA
         (IDLIMPEZA, NMTABELALIMP, NRORDEMLIMPEZA)      
      VALUES
         (P_IDSISTEMA, 'PRODACABADO', V_NRORDEM);
   END IF;

   INSERT INTO TRABPROCLIMPEZA
      (IDLIMPEZA, NMTABELALIMP)
   VALUES
      (P_IDSISTEMA, 'PRODACABADO');
      
   BEGIN
      EXECUTE IMMEDIATE 'ALTER TRIGGER LOG_CDP_PRODACABADO DISABLE';
   EXCEPTION
      WHEN OTHERS THEN NULL;
   END;
   
   V_NRORDEM := LPAD(TO_CHAR(TO_NUMBER(V_NRORDEM)+1), 3, '0');

   UPDATE TABLIMPEZA
      SET NRORDEMLIMPEZA = V_NRORDEM
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'ETAFABRICOP';

   IF NOT(SQL%ROWCOUNT > 0) THEN
      INSERT INTO TABLIMPEZA
         (IDLIMPEZA, NMTABELALIMP, NRORDEMLIMPEZA)      
      VALUES
         (P_IDSISTEMA, 'ETAFABRICOP', V_NRORDEM);
   END IF;

   INSERT INTO TRABPROCLIMPEZA
      (IDLIMPEZA, NMTABELALIMP)
   VALUES
      (P_IDSISTEMA, 'ETAFABRICOP');

   V_NRORDEM := LPAD(TO_CHAR(TO_NUMBER(V_NRORDEM)+1), 3, '0');

   UPDATE TABLIMPEZA
      SET NRORDEMLIMPEZA = V_NRORDEM
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'RESERVEQUIPAPRO';

   IF NOT(SQL%ROWCOUNT > 0) THEN
      INSERT INTO TABLIMPEZA
         (IDLIMPEZA, NMTABELALIMP, NRORDEMLIMPEZA)      
      VALUES
         (P_IDSISTEMA, 'RESERVEQUIPAPRO', V_NRORDEM);
   END IF;

   INSERT INTO TRABPROCLIMPEZA
      (IDLIMPEZA, NMTABELALIMP)
   VALUES
      (P_IDSISTEMA, 'RESERVEQUIPAPRO');
      
   V_NRORDEM := LPAD(TO_CHAR(TO_NUMBER(V_NRORDEM)+1), 3, '0');

   UPDATE TABLIMPEZA
      SET NRORDEMLIMPEZA = V_NRORDEM
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'SUBPRETAPAOP';

   IF NOT(SQL%ROWCOUNT > 0) THEN
      INSERT INTO TABLIMPEZA
         (IDLIMPEZA, NMTABELALIMP, NRORDEMLIMPEZA)      
      VALUES
         (P_IDSISTEMA, 'SUBPRETAPAOP', V_NRORDEM);
   END IF;

   INSERT INTO TRABPROCLIMPEZA
      (IDLIMPEZA, NMTABELALIMP)
   VALUES
      (P_IDSISTEMA, 'SUBPRETAPAOP');

   V_NRORDEM := LPAD(TO_CHAR(TO_NUMBER(V_NRORDEM)+1), 3, '0');

   UPDATE TABLIMPEZA
      SET NRORDEMLIMPEZA = V_NRORDEM
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'AUDITORIA';

   IF NOT(SQL%ROWCOUNT > 0) THEN
      INSERT INTO TABLIMPEZA
         (IDLIMPEZA, NMTABELALIMP, NRORDEMLIMPEZA)      
      VALUES
         (P_IDSISTEMA, 'AUDITORIA', V_NRORDEM);
   END IF;

   INSERT INTO TRABPROCLIMPEZA
      (IDLIMPEZA, NMTABELALIMP)
   VALUES
      (P_IDSISTEMA, 'AUDITORIA');
      
   V_NRORDEM := LPAD(TO_CHAR(TO_NUMBER(V_NRORDEM)+1), 3, '0');

   UPDATE TABLIMPEZA
      SET NRORDEMLIMPEZA = V_NRORDEM
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'TAREFACHECKOP';

   IF NOT(SQL%ROWCOUNT > 0) THEN
      INSERT INTO TABLIMPEZA
         (IDLIMPEZA, NMTABELALIMP, NRORDEMLIMPEZA)      
      VALUES
         (P_IDSISTEMA, 'TAREFACHECKOP', V_NRORDEM);
   END IF;

   INSERT INTO TRABPROCLIMPEZA
      (IDLIMPEZA, NMTABELALIMP)
   VALUES
      (P_IDSISTEMA, 'TAREFACHECKOP');
      
   V_NRORDEM := LPAD(TO_CHAR(TO_NUMBER(V_NRORDEM)+1), 3, '0');

   UPDATE TABLIMPEZA
      SET NRORDEMLIMPEZA = V_NRORDEM
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'RECURETAPAOP';

   IF NOT(SQL%ROWCOUNT > 0) THEN
      INSERT INTO TABLIMPEZA
         (IDLIMPEZA, NMTABELALIMP, NRORDEMLIMPEZA)      
      VALUES
         (P_IDSISTEMA, 'RECURETAPAOP', V_NRORDEM);
   END IF;

   INSERT INTO TRABPROCLIMPEZA
      (IDLIMPEZA, NMTABELALIMP)
   VALUES
      (P_IDSISTEMA, 'RECURETAPAOP');

   V_NRORDEM := LPAD(TO_CHAR(TO_NUMBER(V_NRORDEM)+1), 3, '0');

   UPDATE TABLIMPEZA
      SET NRORDEMLIMPEZA = V_NRORDEM
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'PERDAOP';

   IF NOT(SQL%ROWCOUNT > 0) THEN
      INSERT INTO TABLIMPEZA
         (IDLIMPEZA, NMTABELALIMP, NRORDEMLIMPEZA)      
      VALUES
         (P_IDSISTEMA, 'PERDAOP', V_NRORDEM);
   END IF;

   INSERT INTO TRABPROCLIMPEZA
      (IDLIMPEZA, NMTABELALIMP)
   VALUES
      (P_IDSISTEMA, 'PERDAOP');
      
   V_NRORDEM := LPAD(TO_CHAR(TO_NUMBER(V_NRORDEM)+1), 3, '0');

   UPDATE TABLIMPEZA
      SET NRORDEMLIMPEZA = V_NRORDEM
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'ITEMRETIEST';

   IF NOT(SQL%ROWCOUNT > 0) THEN
      INSERT INTO TABLIMPEZA
         (IDLIMPEZA, NMTABELALIMP, NRORDEMLIMPEZA)      
      VALUES
         (P_IDSISTEMA, 'ITEMRETIEST', V_NRORDEM);
   END IF;

   INSERT INTO TRABPROCLIMPEZA
      (IDLIMPEZA, NMTABELALIMP)
   VALUES
      (P_IDSISTEMA, 'ITEMRETIEST');
      
   V_NRORDEM := LPAD(TO_CHAR(TO_NUMBER(V_NRORDEM)+1), 3, '0');

   UPDATE TABLIMPEZA
      SET NRORDEMLIMPEZA = V_NRORDEM
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'LOTIRETIEST';

   IF NOT(SQL%ROWCOUNT > 0) THEN
      INSERT INTO TABLIMPEZA
         (IDLIMPEZA, NMTABELALIMP, NRORDEMLIMPEZA)      
      VALUES
         (P_IDSISTEMA, 'LOTIRETIEST', V_NRORDEM);
   END IF;

   INSERT INTO TRABPROCLIMPEZA
      (IDLIMPEZA, NMTABELALIMP)
   VALUES
      (P_IDSISTEMA, 'LOTIRETIEST');
  
  /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA ANDAMENTO */
   UPDATE TRABPROCLIMPEZA
      SET IDSITUPROCLIMP = 'A'
    WHERE IDLIMPEZA = P_IDSISTEMA 
      AND NMTABELALIMP = 'ORDPRODUCAO';

   COMMIT;
   VERIFTIMEOUT(V_DTHRFINLIMPEZA);

   V_PASSO := 0;

   OPEN C_LISTA;
   LOOP
      FETCH C_LISTA INTO V_CDFILIAL;
      EXIT WHEN C_LISTA%NOTFOUND;

      FOR C_ORDPRODUCAO IN(SELECT ROWID LINHA, CDFILIAL, NRORDPROD, NRSUBORDPROD 
                           FROM ORDPRODUCAO
                          WHERE DTGERORDPROD <= P_DTFINAL
                            AND CDFILIAL = V_CDFILIAL)LOOP 
             
          /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA ANDAMENTO */
          UPDATE TRABPROCLIMPEZA
             SET IDSITUPROCLIMP = 'A'
           WHERE IDLIMPEZA = P_IDSISTEMA 
             AND NMTABELALIMP = 'PRODACABADO';
             
          V_PASSO := 1;
          
          FOR C_PRODACABADO IN(SELECT ROWID AS LINHA, CDFILIAL, NRORDPROD, NRSUBORDPROD, CDSUBPRODETA, NRSUBPRETAOP, CDPRODUTO, NRPRODACAB
                                 FROM PRODACABADO
                                WHERE PRODACABADO.CDFILIAL = C_ORDPRODUCAO.CDFILIAL
                                  AND PRODACABADO.NRORDPROD = C_ORDPRODUCAO.NRORDPROD
                                  AND PRODACABADO.NRSUBORDPROD = C_ORDPRODUCAO.NRSUBORDPROD) LOOP
                   
             DELETE PRODACABADO
              WHERE ROWID = C_PRODACABADO.LINHA;
   
             V_EXCLUPRODACABADO := SQL%ROWCOUNT + V_EXCLUPRODACABADO;
             
             IF V_COUNT_COMMIT >= V_NUM_TO_COMMIT THEN
                   
                   UPDATE TRABPROCLIMPEZA
                     SET QTREGEXCLIMPEZA = V_EXCLUPRODACABADO
                   WHERE IDLIMPEZA = P_IDSISTEMA
                     AND NMTABELALIMP = 'PRODACABADO';
   
                  /*CONTROLE DE COMMIT HA CADA 1000 REGISTRO DELETEDO  E PARA ATUALIZAR A TELA DE LIMPEZA*/
                  V_COUNT_COMMIT:= 1;
                  COMMIT;
             ELSE
                  V_COUNT_COMMIT:= V_COUNT_COMMIT + 1;
             END IF;
             /*Verifica se a procedure estourou o tempo limite*/
             VERIFTIMEOUT(V_DTHRFINLIMPEZA);
                              
          END LOOP;
          
          V_PASSO := 2;
          
          FOR C_ETAFABRICOP IN(SELECT ROWID LINHA, CDFILIAL, NRORDPROD, NRSUBORDPROD, CDETAPAPROD 
                                 FROM ETAFABRICOP
                                WHERE ETAFABRICOP.CDFILIAL = C_ORDPRODUCAO.CDFILIAL
                                  AND ETAFABRICOP.NRORDPROD = C_ORDPRODUCAO.NRORDPROD
                                  AND ETAFABRICOP.NRSUBORDPROD = C_ORDPRODUCAO.NRSUBORDPROD) LOOP

             V_PASSO := 3;
             
             FOR C_RETIRADAESTO IN(SELECT ROWID LINHA, CDFILIAL, NRRETEST
                                     FROM RETIRADAESTO
                                    WHERE RETIRADAESTO.CDFILIAL = C_ETAFABRICOP.CDFILIAL
                                      AND RETIRADAESTO.NRORDPROD = C_ETAFABRICOP.NRORDPROD
                                      AND RETIRADAESTO.NRSUBORDPROD = C_ETAFABRICOP.NRSUBORDPROD) LOOP
                
                V_PASSO := 4;    
                
                FOR C_ITEMRETIEST IN(SELECT ROWID LINHA, CDFILIAL, NRRETEST, NRSEQRETPROD, CDPRODUTO
                                       FROM ITEMRETIEST
                                      WHERE ITEMRETIEST.CDFILIAL = C_RETIRADAESTO.CDFILIAL
                                        AND ITEMRETIEST.NRRETEST = C_RETIRADAESTO.NRRETEST) LOOP
                   
                   V_PASSO := 5;
                      
                   FOR C_LOTITRETIEST IN(SELECT ROWID LINHA, CDFILIAL, NRRETEST, NRSEQRETPROD, CDPRODUTO, NRLOTEESTQ, NRSUBLOTE, CDALMOXARIFE, CDLOCALESTOQ, IDTPRETEST, NRSEQRETLOTE
                                          FROM LOTITRETIEST
                                         WHERE LOTITRETIEST.CDFILIAL = C_ITEMRETIEST.CDFILIAL
                                           AND LOTITRETIEST.NRRETEST = C_ITEMRETIEST.NRRETEST
                                           AND LOTITRETIEST.NRSEQRETPROD = C_ITEMRETIEST.NRSEQRETPROD
                                           AND LOTITRETIEST.CDPRODUTO = C_ITEMRETIEST.CDPRODUTO) LOOP
                      
                      /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA ANDAMENTO */
                      UPDATE TRABPROCLIMPEZA
                         SET IDSITUPROCLIMP = 'A'
                       WHERE IDLIMPEZA = P_IDSISTEMA 
                         AND NMTABELALIMP = 'LOTITRETIEST';
                      
                      DELETE LOTITRETIEST
                       WHERE ROWID = C_LOTITRETIEST.LINHA;
                      
                      V_EXCLULOTITRETIEST := SQL%ROWCOUNT + V_EXCLULOTITRETIEST;
                      
                      IF V_COUNT_COMMIT >= V_NUM_TO_COMMIT THEN
                            
                         UPDATE TRABPROCLIMPEZA
                           SET QTREGEXCLIMPEZA = V_EXCLULOTITRETIEST
                         WHERE IDLIMPEZA = P_IDSISTEMA
                           AND NMTABELALIMP = 'LOTITRETIEST';
                         
                         /*CONTROLE DE COMMIT HA CADA 1000 REGISTRO DELETEDO  E PARA ATUALIZAR A TELA DE LIMPEZA*/
                         V_COUNT_COMMIT:= 1;
                         COMMIT;
                      ELSE
                         V_COUNT_COMMIT:= V_COUNT_COMMIT + 1;
                      END IF;
                      /*Verifica se a procedure estourou o tempo limite*/
                      VERIFTIMEOUT(V_DTHRFINLIMPEZA);
                                        
                   END LOOP;
                   
                   /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA ANDAMENTO */
                   UPDATE TRABPROCLIMPEZA
                      SET IDSITUPROCLIMP = 'A'
                    WHERE IDLIMPEZA = P_IDSISTEMA 
                      AND NMTABELALIMP = 'ITEMRETIEST';
                   
                   DELETE ITEMRETIEST
                    WHERE ROWID = C_ITEMRETIEST.LINHA;
                   
                   V_EXCLUITEMRETIEST := SQL%ROWCOUNT + V_EXCLUITEMRETIEST;
                   
                   IF V_COUNT_COMMIT >= V_NUM_TO_COMMIT THEN
                         
                      UPDATE TRABPROCLIMPEZA
                        SET QTREGEXCLIMPEZA = V_EXCLUITEMRETIEST
                      WHERE IDLIMPEZA = P_IDSISTEMA
                        AND NMTABELALIMP = 'ITEMRETIEST';
                      
                      /*CONTROLE DE COMMIT HA CADA 1000 REGISTRO DELETEDO  E PARA ATUALIZAR A TELA DE LIMPEZA*/
                      V_COUNT_COMMIT:= 1;
                      COMMIT;
                   ELSE
                      V_COUNT_COMMIT:= V_COUNT_COMMIT + 1;
                   END IF;
                   /*Verifica se a procedure estourou o tempo limite*/
                   VERIFTIMEOUT(V_DTHRFINLIMPEZA);
                                     
                END LOOP;
             
             /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA ANDAMENTO */
             UPDATE TRABPROCLIMPEZA
                SET IDSITUPROCLIMP = 'A'
              WHERE IDLIMPEZA = P_IDSISTEMA 
                AND NMTABELALIMP = 'RETIRADAESTO';
             
             DELETE RETIRADAESTO
              WHERE ROWID = C_RETIRADAESTO.LINHA;
   
             V_EXCLURETIRADAESTO := SQL%ROWCOUNT + V_EXCLURETIRADAESTO;
             
             IF V_COUNT_COMMIT >= V_NUM_TO_COMMIT THEN
                   
                   UPDATE TRABPROCLIMPEZA
                     SET QTREGEXCLIMPEZA = V_EXCLURETIRADAESTO
                   WHERE IDLIMPEZA = P_IDSISTEMA
                     AND NMTABELALIMP = 'RETIRADAESTO';
   
                  /*CONTROLE DE COMMIT HA CADA 1000 REGISTRO DELETEDO  E PARA ATUALIZAR A TELA DE LIMPEZA*/
                  V_COUNT_COMMIT:= 1;
                  COMMIT;
             ELSE
                  V_COUNT_COMMIT:= V_COUNT_COMMIT + 1;
             END IF;
             /*Verifica se a procedure estourou o tempo limite*/
             VERIFTIMEOUT(V_DTHRFINLIMPEZA);
                              
          END LOOP;
                   
             /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA ANDAMENTO */
             UPDATE TRABPROCLIMPEZA
                SET IDSITUPROCLIMP = 'A'
              WHERE IDLIMPEZA = P_IDSISTEMA 
                AND NMTABELALIMP = 'ETAFABRICOP';
             
             DELETE ETAFABRICOP
              WHERE ROWID = C_ETAFABRICOP.LINHA;
   
             V_EXCLUETAFABRICOP := SQL%ROWCOUNT + V_EXCLUETAFABRICOP;
             
             IF V_COUNT_COMMIT >= V_NUM_TO_COMMIT THEN
                   
                   UPDATE TRABPROCLIMPEZA
                     SET QTREGEXCLIMPEZA = V_EXCLUETAFABRICOP
                   WHERE IDLIMPEZA = P_IDSISTEMA
                     AND NMTABELALIMP = 'ETAFABRICOP';
   
                  /*CONTROLE DE COMMIT HA CADA 1000 REGISTRO DELETEDO  E PARA ATUALIZAR A TELA DE LIMPEZA*/
                  V_COUNT_COMMIT:= 1;
                  COMMIT;
             ELSE
                  V_COUNT_COMMIT:= V_COUNT_COMMIT + 1;
             END IF;
             /*Verifica se a procedure estourou o tempo limite*/
             VERIFTIMEOUT(V_DTHRFINLIMPEZA);
                              
          END LOOP;
          
          V_PASSO := 6;
          
          FOR C_RESERVEQUIPAPRO IN(SELECT ROWID LINHA, CDFILIAL, NRORDPROD, NRSUBORDPROD, CDEQUIPPRO, DTHRINIPROD, DTHRFINPROD
                                     FROM RESERVEQUIPAPRO
                                    WHERE RESERVEQUIPAPRO.CDFILIAL = C_ORDPRODUCAO.CDFILIAL
                                      AND RESERVEQUIPAPRO.NRORDPROD = C_ORDPRODUCAO.NRORDPROD
                                      AND RESERVEQUIPAPRO.NRSUBORDPROD = C_ORDPRODUCAO.NRSUBORDPROD) LOOP
                   
             /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA ANDAMENTO */
             UPDATE TRABPROCLIMPEZA
                SET IDSITUPROCLIMP = 'A'
              WHERE IDLIMPEZA = P_IDSISTEMA 
                AND NMTABELALIMP = 'RESERVEQUIPAPRO';
             
             DELETE RESERVEQUIPAPRO
              WHERE ROWID = C_RESERVEQUIPAPRO.LINHA;
   
             V_EXCLURESERVEQUIPAPRO := SQL%ROWCOUNT + V_EXCLURESERVEQUIPAPRO;
             
             IF V_COUNT_COMMIT >= V_NUM_TO_COMMIT THEN
                   
                   UPDATE TRABPROCLIMPEZA
                     SET QTREGEXCLIMPEZA = V_EXCLURESERVEQUIPAPRO
                   WHERE IDLIMPEZA = P_IDSISTEMA
                     AND NMTABELALIMP = 'RESERVEQUIPAPRO';
   
                  /*CONTROLE DE COMMIT HA CADA 1000 REGISTRO DELETEDO  E PARA ATUALIZAR A TELA DE LIMPEZA*/
                  V_COUNT_COMMIT:= 1;
                  COMMIT;
             ELSE
                  V_COUNT_COMMIT:= V_COUNT_COMMIT + 1;
             END IF;
             /*Verifica se a procedure estourou o tempo limite*/
             VERIFTIMEOUT(V_DTHRFINLIMPEZA);
                              
          END LOOP;
          
          V_PASSO := 7;
          
          FOR C_SUBPRETAPAOP IN(SELECT ROWID LINHA, NRSUBPRETAOP, CDFILIAL, NRORDPROD, NRSUBORDPROD, CDSUBPRODETA
                                  FROM SUBPRETAPAOP
                                 WHERE SUBPRETAPAOP.CDFILIAL = C_ORDPRODUCAO.CDFILIAL
                                   AND SUBPRETAPAOP.NRORDPROD = C_ORDPRODUCAO.NRORDPROD
                                   AND SUBPRETAPAOP.NRSUBORDPROD = C_ORDPRODUCAO.NRSUBORDPROD) LOOP
                   
             /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA ANDAMENTO */
             UPDATE TRABPROCLIMPEZA
                SET IDSITUPROCLIMP = 'A'
              WHERE IDLIMPEZA = P_IDSISTEMA 
                AND NMTABELALIMP = 'SUBPRETAPAOP';
             
             DELETE SUBPRETAPAOP
              WHERE ROWID = C_SUBPRETAPAOP.LINHA;
   
             V_EXCLUSUBPRETAPAOP := SQL%ROWCOUNT + V_EXCLUSUBPRETAPAOP;
             
             IF V_COUNT_COMMIT >= V_NUM_TO_COMMIT THEN
                   
                   UPDATE TRABPROCLIMPEZA
                     SET QTREGEXCLIMPEZA = V_EXCLUSUBPRETAPAOP
                   WHERE IDLIMPEZA = P_IDSISTEMA
                     AND NMTABELALIMP = 'SUBPRETAPAOP';
   
                  /*CONTROLE DE COMMIT HA CADA 1000 REGISTRO DELETEDO  E PARA ATUALIZAR A TELA DE LIMPEZA*/
                  V_COUNT_COMMIT:= 1;
                  COMMIT;
             ELSE
                  V_COUNT_COMMIT:= V_COUNT_COMMIT + 1;
             END IF;
             /*Verifica se a procedure estourou o tempo limite*/
             VERIFTIMEOUT(V_DTHRFINLIMPEZA);
                              
          END LOOP;
          
          V_PASSO := 8;
          
          FOR C_TAREFACHECKOP IN(SELECT ROWID LINHA, CDFILIAL, NRORDPROD, NRSUBORDPROD, CDETAPAPROD, CDCHECKLIST, CDINSPECAO, CDHABILIDADE, NRAUDITORIA, NRINSPECAUDI
                                   FROM TAREFACHECKOP 
                                  WHERE TAREFACHECKOP.CDFILIAL = C_ORDPRODUCAO.CDFILIAL
                                    AND TAREFACHECKOP.NRORDPROD = C_ORDPRODUCAO.NRORDPROD
                                    AND TAREFACHECKOP.NRSUBORDPROD = C_ORDPRODUCAO.NRSUBORDPROD) LOOP
                   
             /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA ANDAMENTO */
             UPDATE TRABPROCLIMPEZA
                SET IDSITUPROCLIMP = 'A'
              WHERE IDLIMPEZA = P_IDSISTEMA 
                AND NMTABELALIMP = 'TAREFACHECKOP';
             
             DELETE TAREFACHECKOP
              WHERE ROWID = C_TAREFACHECKOP.LINHA;
   
             V_EXCLUTAREFACHECKOP := SQL%ROWCOUNT + V_EXCLUTAREFACHECKOP;
             
             IF V_COUNT_COMMIT >= V_NUM_TO_COMMIT THEN
                   
                   UPDATE TRABPROCLIMPEZA
                     SET QTREGEXCLIMPEZA = V_EXCLUTAREFACHECKOP
                   WHERE IDLIMPEZA = P_IDSISTEMA
                     AND NMTABELALIMP = 'TAREFACHECKOP';
   
                  /*CONTROLE DE COMMIT HA CADA 1000 REGISTRO DELETEDO  E PARA ATUALIZAR A TELA DE LIMPEZA*/
                  V_COUNT_COMMIT:= 1;
                  COMMIT;
             ELSE
                  V_COUNT_COMMIT:= V_COUNT_COMMIT + 1;
             END IF;
             /*Verifica se a procedure estourou o tempo limite*/
             VERIFTIMEOUT(V_DTHRFINLIMPEZA);
                              
          END LOOP;
          
          V_PASSO := 9;
          
          FOR C_PERDAOP IN(SELECT ROWID LINHA, NRPERDAOP, CDETAPAPROD, NRSUBORDPROD, NRORDPROD, CDFILIAL
                             FROM PERDAOP
                            WHERE PERDAOP.CDFILIAL = C_ORDPRODUCAO.CDFILIAL
                              AND PERDAOP.NRORDPROD = C_ORDPRODUCAO.NRORDPROD
                              AND PERDAOP.NRSUBORDPROD = C_ORDPRODUCAO.NRSUBORDPROD) LOOP
                   
             /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA ANDAMENTO */
             UPDATE TRABPROCLIMPEZA
                SET IDSITUPROCLIMP = 'A'
              WHERE IDLIMPEZA = P_IDSISTEMA 
                AND NMTABELALIMP = 'PERDAOP';
             
             DELETE PERDAOP
              WHERE ROWID = C_PERDAOP.LINHA;
   
             V_EXCLUPERDAOP := SQL%ROWCOUNT + V_EXCLUPERDAOP;
             
             IF V_COUNT_COMMIT >= V_NUM_TO_COMMIT THEN
                   
                   UPDATE TRABPROCLIMPEZA
                     SET QTREGEXCLIMPEZA = V_EXCLUPERDAOP
                   WHERE IDLIMPEZA = P_IDSISTEMA
                     AND NMTABELALIMP = 'PERDAOP';
   
                  /*CONTROLE DE COMMIT HA CADA 1000 REGISTRO DELETEDO  E PARA ATUALIZAR A TELA DE LIMPEZA*/
                  V_COUNT_COMMIT:= 1;
                  COMMIT;
             ELSE
                  V_COUNT_COMMIT:= V_COUNT_COMMIT + 1;
             END IF;
             /*Verifica se a procedure estourou o tempo limite*/
             VERIFTIMEOUT(V_DTHRFINLIMPEZA);
                              
          END LOOP;

      DELETE ORDPRODUCAO
       WHERE ROWID = C_ORDPRODUCAO.LINHA;
   
      V_EXCLUORDPRODUCAO := SQL%ROWCOUNT + V_EXCLUORDPRODUCAO;
             
      IF V_COUNT_COMMIT >= V_NUM_TO_COMMIT THEN
                   
         UPDATE TRABPROCLIMPEZA
            SET QTREGEXCLIMPEZA = V_EXCLUORDPRODUCAO
          WHERE IDLIMPEZA = P_IDSISTEMA
            AND NMTABELALIMP = 'ORDPRODUCAO';
   
          /*CONTROLE DE COMMIT HA CADA 1000 REGISTRO DELETEDO E PARA ATUALIZAR A TELA DE LIMPEZA*/
          V_COUNT_COMMIT:= 1;
          COMMIT;
      ELSE
         V_COUNT_COMMIT:= V_COUNT_COMMIT + 1;
      END IF;
      /*Verifica se a procedure estourou o tempo limite*/
      VERIFTIMEOUT(V_DTHRFINLIMPEZA);          
          
      END LOOP;
      
      /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA ANDAMENTO */
      UPDATE TRABPROCLIMPEZA
         SET IDSITUPROCLIMP = 'A'
       WHERE IDLIMPEZA = P_IDSISTEMA 
         AND NMTABELALIMP = 'AUDITORIA';
             
      V_PASSO := 10;
             
      FOR C_AUDITORIA IN (SELECT ROWID LINHA, CDFILIAL, NRAUDITORIA
                             FROM AUDITORIA
                            WHERE AUDITORIA.CDFILIAL = V_CDFILIAL
                              AND AUDITORIA.DTINCLAUDIT <= P_DTFINAL) LOOP
                                
          DELETE AUDITORIA
           WHERE ROWID = C_AUDITORIA.LINHA;
   
          V_EXCLUAUDITORIA := SQL%ROWCOUNT + V_EXCLUAUDITORIA;
          
          IF V_COUNT_COMMIT >= V_NUM_TO_COMMIT THEN
                
                UPDATE TRABPROCLIMPEZA
                  SET QTREGEXCLIMPEZA = V_EXCLUAUDITORIA
                WHERE IDLIMPEZA = P_IDSISTEMA
                  AND NMTABELALIMP = 'AUDITORIA';
   
               /*CONTROLE DE COMMIT HA CADA 1000 REGISTRO DELETEDO  E PARA ATUALIZAR A TELA DE LIMPEZA*/
               V_COUNT_COMMIT:= 1;
               COMMIT;
          ELSE
               V_COUNT_COMMIT:= V_COUNT_COMMIT + 1;
          END IF;
          /*Verifica se a procedure estourou o tempo limite*/
          VERIFTIMEOUT(V_DTHRFINLIMPEZA);
       
      END LOOP;
          
      /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA ANDAMENTO */
      UPDATE TRABPROCLIMPEZA
         SET IDSITUPROCLIMP = 'A'
       WHERE IDLIMPEZA = P_IDSISTEMA 
         AND NMTABELALIMP = 'RECURETAPAOP';
         
      V_PASSO := 11;
             
      FOR C_RECURETAPAOP IN (SELECT ROWID LINHA, CDFILIAL, NRAUDITORIA, NRINSPECAUDI, NRRECUETAPOP
                               FROM RECURETAPAOP
                              WHERE RECURETAPAOP.CDFILIAL = V_CDFILIAL
                                AND RECURETAPAOP.DTINIUTRECOP <= P_DTFINAL) LOOP
                               
         DELETE RECURETAPAOP
          WHERE ROWID = C_RECURETAPAOP.LINHA;
   
         V_EXCLURECURETAPAOP := SQL%ROWCOUNT + V_EXCLURECURETAPAOP;
         
         IF V_COUNT_COMMIT >= V_NUM_TO_COMMIT THEN
               
               UPDATE TRABPROCLIMPEZA
                 SET QTREGEXCLIMPEZA = V_EXCLURECURETAPAOP
               WHERE IDLIMPEZA = P_IDSISTEMA
                 AND NMTABELALIMP = 'RECURETAPAOP';
   
              /*CONTROLE DE COMMIT HA CADA 1000 REGISTRO DELETEDO  E PARA ATUALIZAR A TELA DE LIMPEZA*/
              V_COUNT_COMMIT:= 1;
              COMMIT;
         ELSE
              V_COUNT_COMMIT:= V_COUNT_COMMIT + 1;
         END IF;
         /*Verifica se a procedure estourou o tempo limite*/
         VERIFTIMEOUT(V_DTHRFINLIMPEZA);
      
      END LOOP;
   END LOOP;
   
   CLOSE C_LISTA;
  

   /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA CONCLUIDO */
   UPDATE TRABPROCLIMPEZA
      SET IDSITUPROCLIMP = 'C',
          QTREGEXCLIMPEZA = V_EXCLUORDPRODUCAO,
          DTHRFINLIMPEZA = SYSDATE
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'ORDPRODUCAO';
      
   /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA CONCLUIDO */
   UPDATE TRABPROCLIMPEZA
      SET IDSITUPROCLIMP = 'C',
          QTREGEXCLIMPEZA = V_EXCLUPRODACABADO,
          DTHRFINLIMPEZA = SYSDATE
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'PRODACABADO';

   /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA CONCLUIDO */
   UPDATE TRABPROCLIMPEZA
      SET IDSITUPROCLIMP = 'C',
          QTREGEXCLIMPEZA = V_EXCLUETAFABRICOP,
          DTHRFINLIMPEZA = SYSDATE
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'ETAFABRICOP';

   /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA CONCLUIDO */
   UPDATE TRABPROCLIMPEZA
      SET IDSITUPROCLIMP = 'C',
          QTREGEXCLIMPEZA = V_EXCLURESERVEQUIPAPRO,
          DTHRFINLIMPEZA = SYSDATE
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'RESERVEQUIPAPRO';

   /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA CONCLUIDO */
   UPDATE TRABPROCLIMPEZA
      SET IDSITUPROCLIMP = 'C',
          QTREGEXCLIMPEZA = V_EXCLUSUBPRETAPAOP,
          DTHRFINLIMPEZA = SYSDATE
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'SUBPRETAPAOP';

   /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA CONCLUIDO */
   UPDATE TRABPROCLIMPEZA
      SET IDSITUPROCLIMP = 'C',
          QTREGEXCLIMPEZA = V_EXCLUAUDITORIA,
          DTHRFINLIMPEZA = SYSDATE
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'AUDITORIA';

   /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA CONCLUIDO */
   UPDATE TRABPROCLIMPEZA
      SET IDSITUPROCLIMP = 'C',
          QTREGEXCLIMPEZA = V_EXCLUTAREFACHECKOP,
          DTHRFINLIMPEZA = SYSDATE
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'TAREFACHECKOP';

   /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA CONCLUIDO */
   UPDATE TRABPROCLIMPEZA
      SET IDSITUPROCLIMP = 'C',
          QTREGEXCLIMPEZA = V_EXCLURECURETAPAOP,
          DTHRFINLIMPEZA = SYSDATE
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'RECURETAPAOP';

   /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA CONCLUIDO */
   UPDATE TRABPROCLIMPEZA
      SET IDSITUPROCLIMP = 'C',
          QTREGEXCLIMPEZA = V_EXCLUPERDAOP,
          DTHRFINLIMPEZA = SYSDATE
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'PERDAOP';

   /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA CONCLUIDO */
   UPDATE TRABPROCLIMPEZA
      SET IDSITUPROCLIMP = 'C',
          QTREGEXCLIMPEZA = V_EXCLUITEMRETIEST,
          DTHRFINLIMPEZA = SYSDATE
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'ITEMRETIEST';
      
   /* COLOCA O STATUS DA TABELA DE LIMPEZA PARA CONCLUIDO */
   UPDATE TRABPROCLIMPEZA
      SET IDSITUPROCLIMP = 'C',
          QTREGEXCLIMPEZA = V_EXCLULOTITRETIEST,
          DTHRFINLIMPEZA = SYSDATE
    WHERE IDLIMPEZA = P_IDSISTEMA
      AND NMTABELALIMP = 'LOTITRETIEST';
      
    UPDATE TRABLIMPEZA
      SET IDSTATUSLIMPEZA = 'C'
    WHERE IDLIMPEZA = P_IDSISTEMA;

   V_COUNT_COMMIT:= 1;
   COMMIT;
   VERIFTIMEOUT(V_DTHRFINLIMPEZA);
   

   INSERT INTO LOGLIMPEZA
     (DSSISTLIMPEZ, NMTABLIMP, DTLIMPDADOS, NMOPERLIMPEZ, DTFINALIMPEZ, DSLIMPEZA, DSRDMUSULOGL, DSENDUSULOGL, DSNMUSUOLOGL, DSMETUSULOGL, QTDLINHAEXCL)
   VALUES
     (P_DSSISTLIMPEZ, 'ORDPRODUCAO', SYSDATE, P_NMOPERLIMPEZ, P_DTFINAL, 'ORDPRODUCAO', V_DSRDM, V_DSIP, V_DSUSUARIO, V_DSMETODO, V_EXCLUORDPRODUCAO);

   INSERT INTO LOGLIMPEZA
     (DSSISTLIMPEZ, NMTABLIMP, DTLIMPDADOS, NMOPERLIMPEZ, DTFINALIMPEZ, DSLIMPEZA, DSRDMUSULOGL, DSENDUSULOGL, DSNMUSUOLOGL, DSMETUSULOGL, QTDLINHAEXCL)
   VALUES
     (P_DSSISTLIMPEZ, 'PRODACABADO', SYSDATE, P_NMOPERLIMPEZ, P_DTFINAL, 'PRODACABADO', V_DSRDM, V_DSIP, V_DSUSUARIO, V_DSMETODO, V_EXCLUPRODACABADO);

   INSERT INTO LOGLIMPEZA
     (DSSISTLIMPEZ, NMTABLIMP, DTLIMPDADOS, NMOPERLIMPEZ, DTFINALIMPEZ, DSLIMPEZA, DSRDMUSULOGL, DSENDUSULOGL, DSNMUSUOLOGL, DSMETUSULOGL, QTDLINHAEXCL)
   VALUES
     (P_DSSISTLIMPEZ, 'AUDITORIA', SYSDATE, P_NMOPERLIMPEZ, P_DTFINAL, 'AUDITORIA', V_DSRDM, V_DSIP, V_DSUSUARIO, V_DSMETODO, V_EXCLUAUDITORIA);

   INSERT INTO LOGLIMPEZA
     (DSSISTLIMPEZ, NMTABLIMP, DTLIMPDADOS, NMOPERLIMPEZ, DTFINALIMPEZ, DSLIMPEZA, DSRDMUSULOGL, DSENDUSULOGL, DSNMUSUOLOGL, DSMETUSULOGL, QTDLINHAEXCL)
   VALUES
     (P_DSSISTLIMPEZ, 'TAREFACHECKOP', SYSDATE, P_NMOPERLIMPEZ, P_DTFINAL, 'TAREFACHECKOP', V_DSRDM, V_DSIP, V_DSUSUARIO, V_DSMETODO, V_EXCLUTAREFACHECKOP);
     
   INSERT INTO LOGLIMPEZA
     (DSSISTLIMPEZ, NMTABLIMP, DTLIMPDADOS, NMOPERLIMPEZ, DTFINALIMPEZ, DSLIMPEZA, DSRDMUSULOGL, DSENDUSULOGL, DSNMUSUOLOGL, DSMETUSULOGL, QTDLINHAEXCL)
   VALUES
     (P_DSSISTLIMPEZ, 'RECURETAPAOP', SYSDATE, P_NMOPERLIMPEZ, P_DTFINAL, 'RECURETAPAOP', V_DSRDM, V_DSIP, V_DSUSUARIO, V_DSMETODO, V_EXCLURECURETAPAOP);

   INSERT INTO LOGLIMPEZA
     (DSSISTLIMPEZ, NMTABLIMP, DTLIMPDADOS, NMOPERLIMPEZ, DTFINALIMPEZ, DSLIMPEZA, DSRDMUSULOGL, DSENDUSULOGL, DSNMUSUOLOGL, DSMETUSULOGL, QTDLINHAEXCL)
   VALUES
     (P_DSSISTLIMPEZ, 'PERDAOP', SYSDATE, P_NMOPERLIMPEZ, P_DTFINAL, 'PERDAOP', V_DSRDM, V_DSIP, V_DSUSUARIO, V_DSMETODO, V_EXCLUPERDAOP);

   INSERT INTO LOGLIMPEZA
     (DSSISTLIMPEZ, NMTABLIMP, DTLIMPDADOS, NMOPERLIMPEZ, DTFINALIMPEZ, DSLIMPEZA, DSRDMUSULOGL, DSENDUSULOGL, DSNMUSUOLOGL, DSMETUSULOGL, QTDLINHAEXCL)
   VALUES
     (P_DSSISTLIMPEZ, 'ITEMRETIEST', SYSDATE, P_NMOPERLIMPEZ, P_DTFINAL, 'ITEMRETIEST', V_DSRDM, V_DSIP, V_DSUSUARIO, V_DSMETODO, V_EXCLUITEMRETIEST);

   INSERT INTO LOGLIMPEZA
     (DSSISTLIMPEZ, NMTABLIMP, DTLIMPDADOS, NMOPERLIMPEZ, DTFINALIMPEZ, DSLIMPEZA, DSRDMUSULOGL, DSENDUSULOGL, DSNMUSUOLOGL, DSMETUSULOGL, QTDLINHAEXCL)
   VALUES
     (P_DSSISTLIMPEZ, 'LOTITRETIEST', SYSDATE, P_NMOPERLIMPEZ, P_DTFINAL, 'LOTITRETIEST', V_DSRDM, V_DSIP, V_DSUSUARIO, V_DSMETODO, V_EXCLULOTITRETIEST);   

   /*Apagando a lista utilizada para a limpeza*/
   DELETE FROM LISTA
   WHERE NRLISTA =P_NRLISTA; 
   
   
   COMMIT;
   
   BEGIN
      EXECUTE IMMEDIATE 'ALTER TRIGGER LOG_CDP_ORDPRODUCAO ENABLE';
   EXCEPTION
      WHEN OTHERS THEN NULL;
   END;
   
   BEGIN
      EXECUTE IMMEDIATE 'ALTER TRIGGER LOG_CDP_PRODACABADO ENABLE';
   EXCEPTION
      WHEN OTHERS THEN NULL;
   END;

EXCEPTION
WHEN OTHERS THEN

   BEGIN
      EXECUTE IMMEDIATE 'ALTER TRIGGER LOG_CDP_ORDPRODUCAO ENABLE';
   EXCEPTION
      WHEN OTHERS THEN NULL;
   END;
   
   BEGIN
      EXECUTE IMMEDIATE 'ALTER TRIGGER LOG_CDP_PRODACABADO ENABLE';
   EXCEPTION
      WHEN OTHERS THEN NULL;
   END;
   
   V_ERR0R := SQLERRM(SQLCODE);

   IF INSTR(V_ERR0R, 'TIMEOUT - EXCECAO PROPOSITAL TEKNISA') = 0 THEN
      /*Apagando a lista utilizada para a limpeza*/
      DELETE FROM LISTA
      WHERE NRLISTA =P_NRLISTA;

      UPDATE TRABLIMPEZA
      SET IDSTATUSLIMPEZA = 'C', IDLIMPEZACONCERRO = 'S'
      WHERE IDLIMPEZA = P_IDSISTEMA;

      COMMIT;
   ELSE
       UPDATE TRABLIMPEZA
       SET IDSTATUSLIMPEZA = 'P'
       WHERE IDLIMPEZA = P_IDSISTEMA;
   END IF;

 IF (V_EXCLUORDPRODUCAO > 0) THEN
      INSERT INTO LOGLIMPEZA
        (DSSISTLIMPEZ, NMTABLIMP, DTLIMPDADOS, NMOPERLIMPEZ, DTFINALIMPEZ, DSLIMPEZA, DSRDMUSULOGL, DSENDUSULOGL, DSNMUSUOLOGL, DSMETUSULOGL, QTDLINHAEXCL)
      VALUES
        (P_DSSISTLIMPEZ, 'ORDPRODUCAO', SYSDATE, P_NMOPERLIMPEZ, P_DTFINAL, 'ORDPRODUCAO', V_DSRDM, V_DSIP, V_DSUSUARIO, V_DSMETODO, V_EXCLUORDPRODUCAO);
   END IF;

   IF (V_EXCLUPRODACABADO > 0) THEN
      INSERT INTO LOGLIMPEZA
        (DSSISTLIMPEZ, NMTABLIMP, DTLIMPDADOS, NMOPERLIMPEZ, DTFINALIMPEZ, DSLIMPEZA, DSRDMUSULOGL, DSENDUSULOGL, DSNMUSUOLOGL, DSMETUSULOGL, QTDLINHAEXCL)
      VALUES
        (P_DSSISTLIMPEZ, 'PRODACABADO', SYSDATE, P_NMOPERLIMPEZ, P_DTFINAL, 'PRODACABADO', V_DSRDM, V_DSIP, V_DSUSUARIO, V_DSMETODO, V_EXCLUPRODACABADO);
   END IF;

   IF (V_EXCLURESERVEQUIPAPRO > 0) THEN
      INSERT INTO LOGLIMPEZA
        (DSSISTLIMPEZ, NMTABLIMP, DTLIMPDADOS, NMOPERLIMPEZ, DTFINALIMPEZ, DSLIMPEZA, DSRDMUSULOGL, DSENDUSULOGL, DSNMUSUOLOGL, DSMETUSULOGL, QTDLINHAEXCL)
      VALUES
        (P_DSSISTLIMPEZ, 'RESERVEQUIPAPRO', SYSDATE, P_NMOPERLIMPEZ, P_DTFINAL, 'RESERVEQUIPAPRO', V_DSRDM, V_DSIP, V_DSUSUARIO, V_DSMETODO, V_EXCLURESERVEQUIPAPRO);
   END IF;

   IF (V_EXCLUSUBPRETAPAOP > 0) THEN
      INSERT INTO LOGLIMPEZA
        (DSSISTLIMPEZ, NMTABLIMP, DTLIMPDADOS, NMOPERLIMPEZ, DTFINALIMPEZ, DSLIMPEZA, DSRDMUSULOGL, DSENDUSULOGL, DSNMUSUOLOGL, DSMETUSULOGL, QTDLINHAEXCL)
      VALUES
        (P_DSSISTLIMPEZ, 'SUBPRETAPAOP', SYSDATE, P_NMOPERLIMPEZ, P_DTFINAL, 'SUBPRETAPAOP', V_DSRDM, V_DSIP, V_DSUSUARIO, V_DSMETODO, V_EXCLUSUBPRETAPAOP);
   END IF;
   
   IF (V_EXCLUAUDITORIA> 0) THEN
      INSERT INTO LOGLIMPEZA
        (DSSISTLIMPEZ, NMTABLIMP, DTLIMPDADOS, NMOPERLIMPEZ, DTFINALIMPEZ, DSLIMPEZA, DSRDMUSULOGL, DSENDUSULOGL, DSNMUSUOLOGL, DSMETUSULOGL, QTDLINHAEXCL)
      VALUES
        (P_DSSISTLIMPEZ, 'AUDITORIA', SYSDATE, P_NMOPERLIMPEZ, P_DTFINAL, 'AUDITORIA', V_DSRDM, V_DSIP, V_DSUSUARIO, V_DSMETODO, V_EXCLUAUDITORIA);
   END IF;
   
   IF (V_EXCLUTAREFACHECKOP > 0) THEN
      INSERT INTO LOGLIMPEZA
        (DSSISTLIMPEZ, NMTABLIMP, DTLIMPDADOS, NMOPERLIMPEZ, DTFINALIMPEZ, DSLIMPEZA, DSRDMUSULOGL, DSENDUSULOGL, DSNMUSUOLOGL, DSMETUSULOGL, QTDLINHAEXCL)
      VALUES
        (P_DSSISTLIMPEZ, 'TAREFACHECKOP', SYSDATE, P_NMOPERLIMPEZ, P_DTFINAL, 'TAREFACHECKOP', V_DSRDM, V_DSIP, V_DSUSUARIO, V_DSMETODO, V_EXCLUTAREFACHECKOP);
   END IF;
   
   IF (V_EXCLURECURETAPAOP > 0) THEN
      INSERT INTO LOGLIMPEZA
        (DSSISTLIMPEZ, NMTABLIMP, DTLIMPDADOS, NMOPERLIMPEZ, DTFINALIMPEZ, DSLIMPEZA, DSRDMUSULOGL, DSENDUSULOGL, DSNMUSUOLOGL, DSMETUSULOGL, QTDLINHAEXCL)
      VALUES
        (P_DSSISTLIMPEZ, 'RECURETAPAOP', SYSDATE, P_NMOPERLIMPEZ, P_DTFINAL, 'RECURETAPAOP', V_DSRDM, V_DSIP, V_DSUSUARIO, V_DSMETODO, V_EXCLURECURETAPAOP);
   END IF;
   
   IF (V_EXCLUPERDAOP > 0) THEN
      INSERT INTO LOGLIMPEZA
        (DSSISTLIMPEZ, NMTABLIMP, DTLIMPDADOS, NMOPERLIMPEZ, DTFINALIMPEZ, DSLIMPEZA, DSRDMUSULOGL, DSENDUSULOGL, DSNMUSUOLOGL, DSMETUSULOGL, QTDLINHAEXCL)
      VALUES
        (P_DSSISTLIMPEZ, 'PERDAOP', SYSDATE, P_NMOPERLIMPEZ, P_DTFINAL, 'PERDAOP', V_DSRDM, V_DSIP, V_DSUSUARIO, V_DSMETODO, V_EXCLUPERDAOP);
   END IF;
   
   IF (V_EXCLUITEMRETIEST > 0) THEN
      INSERT INTO LOGLIMPEZA
        (DSSISTLIMPEZ, NMTABLIMP, DTLIMPDADOS, NMOPERLIMPEZ, DTFINALIMPEZ, DSLIMPEZA, DSRDMUSULOGL, DSENDUSULOGL, DSNMUSUOLOGL, DSMETUSULOGL, QTDLINHAEXCL)
      VALUES
        (P_DSSISTLIMPEZ, 'ITEMRETIEST', SYSDATE, P_NMOPERLIMPEZ, P_DTFINAL, 'ITEMRETIEST', V_DSRDM, V_DSIP, V_DSUSUARIO, V_DSMETODO, V_EXCLUITEMRETIEST);
   END IF;
   
   IF (V_EXCLULOTITRETIEST > 0) THEN
      INSERT INTO LOGLIMPEZA
        (DSSISTLIMPEZ, NMTABLIMP, DTLIMPDADOS, NMOPERLIMPEZ, DTFINALIMPEZ, DSLIMPEZA, DSRDMUSULOGL, DSENDUSULOGL, DSNMUSUOLOGL, DSMETUSULOGL, QTDLINHAEXCL)
      VALUES
        (P_DSSISTLIMPEZ, 'LOTITRETIEST', SYSDATE, P_NMOPERLIMPEZ, P_DTFINAL, 'LOTITRETIEST', V_DSRDM, V_DSIP, V_DSUSUARIO, V_DSMETODO, V_EXCLULOTITRETIEST);
   END IF;

   COMMIT;

   RAISE_APPLICATION_ERROR (-20101, 'PASSO : ' || V_PASSO || '   -   ' || V_ERR0R);

END;
/
-- VERSAO --
BEGIN ATUVEROBJ('LIMPEZA_DADOS_CDP','6.39.006'); END;
/
