CREATE OR REPLACE PROCEDURE REPLICDADOS_PRODUTOS(
   P_REPLICADADOS  IN VARCHAR,
   P_NMPRODUTO     IN VARCHAR,
   P_SGUNIDADE     IN VARCHAR,
   P_CDPRODUTO     IN VARCHAR,
   P_CDARVPROD     IN VARCHAR,
   P_OPERACAO      IN VARCHAR,
   P_CDARVPRODEST  IN VARCHAR,
   P_CDPRODUTOORI  OUT VARCHAR,
   P_IDERRO        OUT VARCHAR)
AS
   V_CDARVPROD       PRODUTO.CDARVPROD%TYPE;
   V_CDNVPRODUTO     PRODUTO.CDNVPRODUTO%TYPE;
   V_CDPICTPROD      PARAMGERAL.CDPICTPROD%TYPE;
   V_CDPICTPRODR     PARAMGERAL.CDPICTPROD%TYPE;
   V_CDPRODUTO       PRODUTO.CDPRODUTO%TYPE;
   V_CDPRODUTOEST    PRODUTO.CDPRODUTO%TYPE;
   V_CDPRODUTOORI    PRODUTO.CDPRODUTO%TYPE;
   V_NRSEQCDPRODUTO  NOVOCODIGO.NRSEQUENCIAL%TYPE;

V_SELECT_TEXT  VARCHAR2(1000);
V_IDERRO       VARCHAR2(200);
C_SELECT       INTEGER;
V_RESULT       INTEGER;

BEGIN
   V_IDERRO := '';
   V_CDPRODUTOORI := '';
   V_CDPRODUTOEST := '';
   IF P_OPERACAO = '1' THEN
      SELECT CDPICTPROD INTO V_CDPICTPROD
      FROM PARAMGERAL;

      V_SELECT_TEXT := '';
      V_SELECT_TEXT := V_SELECT_TEXT||' SELECT MAX(CDPICTPROD)';
      V_SELECT_TEXT := V_SELECT_TEXT||' FROM PARAMGERAL@'||P_REPLICADADOS;
      C_SELECT := DBMS_SQL.OPEN_CURSOR;
      DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
      DBMS_SQL.DEFINE_COLUMN(C_SELECT,1,V_CDPICTPRODR,30);
      V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
      IF DBMS_SQL.FETCH_ROWS(C_SELECT)>0 THEN
         DBMS_SQL.COLUMN_VALUE(C_SELECT,1,V_CDPICTPRODR);
      END IF;
      DBMS_SQL.CLOSE_CURSOR(C_SELECT);


      IF V_CDPICTPROD <> V_CDPICTPRODR THEN
         V_IDERRO := V_IDERRO||'Mascaradiferente_';
      END IF;

      SELECT MAX(CDARVPROD), MAX(CDNVPRODUTO)  INTO V_CDARVPROD, V_CDNVPRODUTO
      FROM PRODUTO
      WHERE (CDPRODUTO = P_CDPRODUTO);

      IF V_CDNVPRODUTO > 1 THEN
         V_SELECT_TEXT := '';
         V_SELECT_TEXT := V_SELECT_TEXT||' SELECT MAX(CDPRODUTO)';
         V_SELECT_TEXT := V_SELECT_TEXT||' FROM PRODUTO@'||P_REPLICADADOS;
         V_SELECT_TEXT := V_SELECT_TEXT||' WHERE ('''||V_CDARVPROD||''' LIKE CDARVPROD || ''%'') AND';
         V_SELECT_TEXT := V_SELECT_TEXT||'       ('||V_CDNVPRODUTO||' -1 = CDNVPRODUTO         ) AND';
         V_SELECT_TEXT := V_SELECT_TEXT||'       (IDPRODCOMISS IS NULL                         )';
         C_SELECT := DBMS_SQL.OPEN_CURSOR;
         DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
         DBMS_SQL.DEFINE_COLUMN(C_SELECT,1,V_CDPRODUTO,30);
         V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
         IF DBMS_SQL.FETCH_ROWS(C_SELECT)>0 THEN
            DBMS_SQL.COLUMN_VALUE(C_SELECT,1,V_CDPRODUTO);
         END IF;
         DBMS_SQL.CLOSE_CURSOR(C_SELECT);

         IF V_CDPRODUTO IS NULL THEN
            V_IDERRO  := V_IDERRO||'ProdNivel_';
         END IF;
      END IF;

      V_SELECT_TEXT := '';
      V_SELECT_TEXT := V_SELECT_TEXT||' SELECT MAX(CDPRODUTO)';
      V_SELECT_TEXT := V_SELECT_TEXT||' FROM PRODUTO@'||P_REPLICADADOS;
      V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (CDARVPROD = '''||P_CDARVPROD||''') AND';
      V_SELECT_TEXT := V_SELECT_TEXT||'       (IDPRODCOMISS IS NULL             )';
      C_SELECT := DBMS_SQL.OPEN_CURSOR;
      DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
      DBMS_SQL.DEFINE_COLUMN(C_SELECT,1,V_CDPRODUTO,30);
      V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
      IF DBMS_SQL.FETCH_ROWS(C_SELECT)>0 THEN
         DBMS_SQL.COLUMN_VALUE(C_SELECT,1,V_CDPRODUTO);
      END IF;
      DBMS_SQL.CLOSE_CURSOR(C_SELECT);

      IF V_CDPRODUTO IS NOT NULL THEN
        V_IDERRO := V_IDERRO||'ProdCad_';
      END IF;

      IF (P_CDARVPRODEST IS NOT NULL) THEN
         IF (P_CDARVPROD <> P_CDARVPRODEST) THEN
            V_SELECT_TEXT := '';
            V_SELECT_TEXT := V_SELECT_TEXT||' SELECT CDPRODUTO';
            V_SELECT_TEXT := V_SELECT_TEXT||' FROM PRODUTO@'||P_REPLICADADOS;
            V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (CDARVPROD = '''||P_CDARVPRODEST||''')';
            C_SELECT := DBMS_SQL.OPEN_CURSOR;
            DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
            DBMS_SQL.DEFINE_COLUMN(C_SELECT,1,V_CDPRODUTOEST,30);
            V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
            IF DBMS_SQL.FETCH_ROWS(C_SELECT)>0 THEN
               DBMS_SQL.COLUMN_VALUE(C_SELECT,1,V_CDPRODUTOEST);
            END IF;
            DBMS_SQL.CLOSE_CURSOR(C_SELECT);

            IF V_CDPRODUTOEST IS NULL THEN
               V_IDERRO := V_IDERRO||'ProdESTNCad_';
            END IF;
         END IF;
      END IF;

      IF V_IDERRO IS NULL THEN
         V_SELECT_TEXT := '';
         V_SELECT_TEXT := V_SELECT_TEXT||' SELECT LPAD(TO_CHAR(TO_NUMBER(NVL(NRSEQUENCIAL,1) + 1)),10,0)';
         V_SELECT_TEXT := V_SELECT_TEXT||' FROM NOVOCODIGO@'||P_REPLICADADOS;
         V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (CDCONTADOR = ''PRODUTO'')';
         C_SELECT := DBMS_SQL.OPEN_CURSOR;
         DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
         DBMS_SQL.DEFINE_COLUMN(C_SELECT,1,V_NRSEQCDPRODUTO,30);
         V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
         IF DBMS_SQL.FETCH_ROWS(C_SELECT)>0 THEN
            DBMS_SQL.COLUMN_VALUE(C_SELECT,1,V_NRSEQCDPRODUTO);
         END IF;
         DBMS_SQL.CLOSE_CURSOR(C_SELECT);

         V_CDPRODUTOORI := V_NRSEQCDPRODUTO;

         V_SELECT_TEXT := '';
         V_SELECT_TEXT := V_SELECT_TEXT||' UPDATE NOVOCODIGO@'||P_REPLICADADOS;
         V_SELECT_TEXT := V_SELECT_TEXT||' SET  NRSEQUENCIAL = LPAD('''||V_NRSEQCDPRODUTO||''', 20, 0)';
         V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (CDCONTADOR = ''PRODUTO'')';
         C_SELECT := DBMS_SQL.OPEN_CURSOR;
         DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
         V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
         DBMS_SQL.CLOSE_CURSOR(C_SELECT);

         IF (V_CDPRODUTOEST IS NULL)  AND (P_CDARVPRODEST IS NOT NULL) THEN
            V_CDPRODUTOEST := V_NRSEQCDPRODUTO;
         END IF;

         V_SELECT_TEXT := '';
         V_SELECT_TEXT := V_SELECT_TEXT||' INSERT INTO PRODUTO@'||P_REPLICADADOS;
         V_SELECT_TEXT := V_SELECT_TEXT||'  (CDARVPROD,CDPRODUTO,SGUNIDADE,CDNVPRODUTO,NMPRODUTO,';
         V_SELECT_TEXT := V_SELECT_TEXT||'   VRPESOUNID,CDPRODESTO,VRARREDREQ,NMPRODINGLES,NMPRODESPANH,';
         V_SELECT_TEXT := V_SELECT_TEXT||'   VRFATOCONV,VRARREDCMP,IDINTESAFR,CDBARPRODUTO,VRPEFATOCORR,';
         V_SELECT_TEXT := V_SELECT_TEXT||'   VRPEFATOCOCC,CDPRODINTE,DSCOMPLNOME,VRVOLMED,VRFATSEG,';
         V_SELECT_TEXT := V_SELECT_TEXT||'   NRDIASVALIDA,CDNACDESHOSP,VRFATOCONVPR,CDPRODPROD,NRREGIPROD,';
         V_SELECT_TEXT := V_SELECT_TEXT||'   CDCLATERAP,CDVIACESDIET,NRDIASVALANA,IDPRODPROD,DSREFBIBPROD,';
         V_SELECT_TEXT := V_SELECT_TEXT||'   IDPRODATIVPR,CDPRODNCM)';
         V_SELECT_TEXT := V_SELECT_TEXT||' SELECT';
         V_SELECT_TEXT := V_SELECT_TEXT||'  CDARVPROD,'''||V_NRSEQCDPRODUTO||''','''||P_SGUNIDADE||''',CDNVPRODUTO,'''||P_NMPRODUTO||''',';
         V_SELECT_TEXT := V_SELECT_TEXT||'  VRPESOUNID,'''||V_CDPRODUTOEST||''',VRARREDREQ,NMPRODINGLES,NMPRODESPANH,';
         V_SELECT_TEXT := V_SELECT_TEXT||'  VRFATOCONV,VRARREDCMP,IDINTESAFR,CDBARPRODUTO,VRPEFATOCORR,';
         V_SELECT_TEXT := V_SELECT_TEXT||'  VRPEFATOCOCC,CDPRODINTE,DSCOMPLNOME,VRVOLMED,VRFATSEG,NRDIASVALIDA,';
         V_SELECT_TEXT := V_SELECT_TEXT||'  CDNACDESHOSP,VRFATOCONVPR,CDPRODPROD,NRREGIPROD,CDCLATERAP,';
         V_SELECT_TEXT := V_SELECT_TEXT||'  CDVIACESDIET,NRDIASVALANA,IDPRODPROD,DSREFBIBPROD,IDPRODATIVPR,';
         V_SELECT_TEXT := V_SELECT_TEXT||'  CDPRODNCM';
         V_SELECT_TEXT := V_SELECT_TEXT||' FROM PRODUTO';
         V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (CDPRODUTO = '''||P_CDPRODUTO||''')';
         C_SELECT := DBMS_SQL.OPEN_CURSOR;
         DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
         V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
         DBMS_SQL.CLOSE_CURSOR(C_SELECT);
      END IF;
   END IF;

   IF P_OPERACAO = '2' THEN
      V_SELECT_TEXT := '';
      V_SELECT_TEXT := V_SELECT_TEXT||' SELECT MAX(CDPRODUTO)';
      V_SELECT_TEXT := V_SELECT_TEXT||' FROM PRODUTO@'||P_REPLICADADOS;
      V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (CDARVPROD = '''||P_CDARVPROD||''') AND';
      V_SELECT_TEXT := V_SELECT_TEXT||'       (IDPRODCOMISS IS NULL             )';
      C_SELECT := DBMS_SQL.OPEN_CURSOR;
      DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
      DBMS_SQL.DEFINE_COLUMN(C_SELECT,1,V_CDPRODUTOORI,30);
      V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
      IF DBMS_SQL.FETCH_ROWS(C_SELECT)>0 THEN
         DBMS_SQL.COLUMN_VALUE(C_SELECT,1,V_CDPRODUTOORI);
      END IF;
      DBMS_SQL.CLOSE_CURSOR(C_SELECT);

      IF V_CDPRODUTOORI IS NULL THEN
         V_IDERRO  := V_IDERRO||'ProdNaoCad_';
      END IF;

      SELECT MAX(CDARVPROD), MAX(CDNVPRODUTO) INTO V_CDARVPROD, V_CDNVPRODUTO
      FROM PRODUTO
      WHERE (CDPRODUTO = P_CDPRODUTO);

      V_SELECT_TEXT := '';
      V_SELECT_TEXT := V_SELECT_TEXT||' SELECT MAX(CDPRODUTO)';
      V_SELECT_TEXT := V_SELECT_TEXT||' FROM PRODUTO@'||P_REPLICADADOS;
      V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (CDARVPROD LIKE  '''||V_CDARVPROD||''' || ''%'') AND';
      V_SELECT_TEXT := V_SELECT_TEXT||'       ('||V_CDNVPRODUTO||' +1 = CDNVPRODUTO          ) AND';
      V_SELECT_TEXT := V_SELECT_TEXT||'       (IDPRODCOMISS IS NULL                          )';
      C_SELECT := DBMS_SQL.OPEN_CURSOR;
      DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
      DBMS_SQL.DEFINE_COLUMN(C_SELECT,1,V_CDPRODUTO,30);
      V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
      IF DBMS_SQL.FETCH_ROWS(C_SELECT)>0 THEN
         DBMS_SQL.COLUMN_VALUE(C_SELECT,1,V_CDPRODUTO);
      END IF;
      DBMS_SQL.CLOSE_CURSOR(C_SELECT);

      IF V_CDPRODUTO IS NOT NULL THEN
         V_IDERRO  := V_IDERRO||'NilvelPostCad_';
      END IF;

      V_SELECT_TEXT := '';
      V_SELECT_TEXT := V_SELECT_TEXT||' DELETE FROM PRODUTO@'||P_REPLICADADOS;
      V_SELECT_TEXT := V_SELECT_TEXT||' WHERE (CDPRODUTO = '''||V_CDPRODUTOORI||''')';
      C_SELECT := DBMS_SQL.OPEN_CURSOR;
      DBMS_SQL.PARSE(C_SELECT,V_SELECT_TEXT,DBMS_SQL.V7);
      V_RESULT := DBMS_SQL.EXECUTE(C_SELECT);
      DBMS_SQL.CLOSE_CURSOR(C_SELECT);



   END IF;
   if V_IDERRO IS NULL THEN
      V_IDERRO := 'OK';
      COMMIT;
   END IF;
   P_IDERRO  := V_IDERRO;
   P_CDPRODUTOORI := V_CDPRODUTOORI;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('REPLICDADOS_PRODUTOS','4.11.117'); END;
/

