ALTER TABLE CLIENTE ADD CDFILTABPREC VARCHAR2(4)
/
ALTER TABLE CLIENTE ADD CDTABEPREC VARCHAR2(3)
/
DECLARE V_CDTABPREC   VARCHAR(3);
        V_DTFINVGPREC DATE;
        V_DTREAJUSTE  DATE;
        V_VRREAJUSTE  NUMBER;

BEGIN
   FOR CUR_TABELA IN (
      SELECT DISTINCT I.CDFILIAL, I.CDTABEPREC, I.DTINIVGPREC, I.CDCLIENTE
      FROM ITEMPRECOCLI I, TABEVEND T
      WHERE SYSDATE BETWEEN T.DTINIVGPREC AND T.DTFINVGPREC AND
            T.CDFILIAL    = I.CDFILIAL   AND
            T.CDTABEPREC  = I.CDTABEPREC AND
            T.DTINIVGPREC = I.DTINIVGPREC 
      ) LOOP

      SELECT MAX(CDTABEPREC)
      INTO V_CDTABPREC
      FROM TABEVEND
      WHERE CDFILIAL = CUR_TABELA.CDFILIAL;

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

      /*insere a tabela*/
      INSERT INTO TABEPREC
         (CDFILIAL, CDTABEPREC, NMTABEPREC)
      VALUES
         (CUR_TABELA.CDFILIAL, V_CDTABPREC, 'Tabela cliente');

      SELECT DTFINVGPREC, DTREAJUSTE, VRREAJUSTE
      INTO V_DTFINVGPREC, V_DTREAJUSTE, V_VRREAJUSTE
      FROM TABEVEND
      WHERE CDFILIAL    = CUR_TABELA.CDFILIAL AND
            CDTABEPREC  = CUR_TABELA.CDTABEPREC AND
            DTINIVGPREC = CUR_TABELA.DTINIVGPREC;

      INSERT INTO TABEVEND
         (CDFILIAL, CDTABEPREC, DTINIVGPREC, DTFINVGPREC,
          DTREAJUSTE, VRREAJUSTE)
      VALUES
         (CUR_TABELA.CDFILIAL, V_CDTABPREC, CUR_TABELA.DTINIVGPREC, V_DTFINVGPREC,
          V_DTREAJUSTE, V_VRREAJUSTE);

      /*insere os produtos*/
      INSERT INTO ITEMPRECO
         (CDFILIAL, CDTABEPREC, DTINIVGPREC, CDPRODUTO, CDPRPAITABPR,
          VRPRECITEM, VRPRECITEMCL, VRPRECMAXITE, IDPRECVARIA,
          VRPRESUGITEM, VRCUSTITEM, VRMKUPITEM)
      (SELECT CDFILIAL, V_CDTABPREC, CUR_TABELA.DTINIVGPREC, CDPRODUTO, CDPRPAITABPR,
              VRPRCLITEM, VRPRCLITEMCL, VRPRMAXCLITE, 'N',
              0, VRCUSTITEMCL, VRMKUPITEMCL
       FROM ITEMPRECOCLI
       WHERE CDFILIAL    = CUR_TABELA.CDFILIAL    AND
             CDTABEPREC  = CUR_TABELA.CDTABEPREC  AND
             DTINIVGPREC = CUR_TABELA.DTINIVGPREC AND
             CDCLIENTE   = CUR_TABELA.CDCLIENTE);

       /*Updata a tabela cadastrada no cliente*/
       UPDATE CLIENTE
       SET CDFILTABPREC = CUR_TABELA.CDFILIAL,
           CDTABEPREC   = V_CDTABPREC
       WHERE CDCLIENTE = CUR_TABELA.CDCLIENTE;

   END LOOP;
   COMMIT;
END;
/