create or replace PROCEDURE RAST_MEDIC_ORDPROD
IS
   V_CDFILIAL        VARCHAR2(4);
   V_NRORDPROD       VARCHAR2(10);
   V_NRSUBORDPROD    VARCHAR2(1);
   V_QTPRODACABADO   FLOAT;
   V_CDARVPROD       VARCHAR2(20);
   V_NMPRODUTO       VARCHAR2(50);
   V_DTINIORDPROD    VARCHAR2(8);
   V_MAX_PAGE        INTEGER;
   V_OPNUM           VARCHAR2(11);
   
   V_RESTO           INTEGER;
   V_CONT            INTEGER;
   V_ERRO            VARCHAR2(500);
   
   CURSOR C_ORDPROD IS 
      SELECT O.CDFILIAL, O.NRORDPROD, O.NRSUBORDPROD, 
             O.QTPRODACABADO, P.CDARVPROD, P.NMPRODUTO, TO_CHAR(O.DTINIORDPROD, 'YYYYMMDD') DTINIORDPROD
        FROM ORDPRODSNCM O, PRODUTO P
       WHERE O.CDPRODUTO = P.CDPRODUTO
         AND O.DTEXPORTA IS NULL;
BEGIN
   OPEN C_ORDPROD;
   LOOP
      FETCH C_ORDPROD INTO V_CDFILIAL, V_NRORDPROD, V_NRSUBORDPROD, 
                           V_QTPRODACABADO, V_CDARVPROD, V_NMPRODUTO, V_DTINIORDPROD;
      EXIT WHEN C_ORDPROD%NOTFOUND;
      V_MAX_PAGE := 0;
      -- CALCULA O NUMERO DE PAGINAS
      SELECT COUNT(1)
        INTO V_CONT
        FROM SERIALPRODSCNM
       WHERE CDFILIAL     = V_CDFILIAL
         AND NRORDPROD    = V_NRORDPROD
         AND NRSUBORDPROD = V_NRSUBORDPROD;
      
      IF (V_CONT > 0) THEN
         SELECT TRUNC(V_CONT/500), MOD(V_CONT, 500) 
           INTO V_MAX_PAGE, V_RESTO
           FROM DUAL;
         
         IF (V_RESTO > 0) THEN
            V_MAX_PAGE := V_MAX_PAGE + 1;
         END IF;
         
         -- NUMERO DA ORDEM MAS SUBORDEM
         V_OPNUM := V_NRORDPROD||V_NRSUBORDPROD;
         
         INSERT INTO OP_FLUXO_INTEGRA(CDFILIAL, NRORDPROD, NRSUBORDPROD, OPNUM, OP_PRD, OP_PRDNAME, OP_QTY, OP_PL, OP_DATE, MAX_PAGE)
         VALUES(V_CDFILIAL, V_NRORDPROD, V_NRSUBORDPROD, V_OPNUM, V_CDARVPROD, V_NMPRODUTO, V_QTPRODACABADO, 1, V_DTINIORDPROD, V_MAX_PAGE);
         
         UPDATE ORDPRODSNCM
            SET DTEXPORTA = SYSDATE
          WHERE CDFILIAL     = V_CDFILIAL
            AND NRORDPROD    = V_NRORDPROD
            AND NRSUBORDPROD = V_NRSUBORDPROD;
         
         COMMIT;
      END IF;
   END LOOP;
   CLOSE C_ORDPROD;
EXCEPTION
   WHEN OTHERS THEN
      V_ERRO := SQLERRM(SQLCODE);
      
      IF C_ORDPROD%ISOPEN THEN
         CLOSE C_ORDPROD;
      END IF;
      
      ROLLBACK;
END;
/