Árvore de páginas

Obs.: Avaliar o cenário de cada Cliente antes de realizar a execução desse script.

-- Cria uma tabela de backup contendo as contas de fornecedores duplicadas
CREATE TABLE LIXO.FORNCONTA_BKP_DUP AS
-- Query que identifica os fornecedores duplicados e sugere um código unificado (FORNCONTCODIGO_NOVO)
SELECT A.*, B.FORNCONTCODIGO_NOVO
  FROM FINANCE.FORNCONTA A,
       (SELECT A.FORNCODIGO, MIN(A.FORNCONTCODIGO) FORNCONTCODIGO_NOVO
          FROM FINANCE.FORNCONTA A
         WHERE 1=1
           AND (A.FORNCODIGO, A.BANCCODIGO, A.FORCAGENCIA, REPLACE(A.FORCCONTA,'-','')) IN (SELECT A.FORNCODIGO, A.BANCCODIGO, A.FORCAGENCIA, REPLACE(A.FORCCONTA,'-','')
                                                                                              FROM FINANCE.FORNCONTA A
                                                                                             GROUP BY A.FORNCODIGO, A.BANCCODIGO, A.FORCAGENCIA, REPLACE(A.FORCCONTA,'-','')
                                                                                             HAVING COUNT(*) <> 1)
         GROUP BY A.FORNCODIGO
       ) B
 WHERE 1=1
   AND A.FORNCODIGO = B.FORNCODIGO
   AND (A.FORNCODIGO, A.BANCCODIGO, A.FORCAGENCIA, REPLACE(A.FORCCONTA,'-','')) IN (SELECT A.FORNCODIGO, A.BANCCODIGO, A.FORCAGENCIA, REPLACE(A.FORCCONTA,'-','')
                                                                                      FROM FINANCE.FORNCONTA A
                                                                                     GROUP BY A.FORNCODIGO, A.BANCCODIGO, A.FORCAGENCIA, REPLACE(A.FORCCONTA,'-','')
                                                                                     HAVING COUNT(*) <> 1)
/
-- Cria uma tabela de backup contendo os registros de Contas a Pagar que terão as contas de fornecedores ajustadas
CREATE TABLE LIXO.FORNCONTA_BKP_DUP_CP AS
SELECT CP.EMPNCOD, CP.CPGCNUMEROPAGAR, C.*
  FROM LIXO.FORNCONTA_BKP_DUP C,
       FINANCE.CONTASPAGAR CP
 WHERE C.FORNCODIGO = CP.FORNCODIGO
   AND C.FORNCONTCODIGO = CP.FORNCONTCODIGO
/
-- Cria uma tabela de backup contendo os registros das Parcelas de Contas a Pagar que terão as contas de fornecedores ajustadas
CREATE TABLE LIXO.FORNCONTA_BKP_DUP_CPP AS
SELECT CPP.EMPNCOD, CPP.CPGCNUMEROPAGAR, CPP.CPGCPARCELA, C.*
  FROM LIXO.FORNCONTA_BKP_DUP C,
       FINANCE.CPPARCELAMENTO CPP
 WHERE C.FORNCODIGO = CPP.FORNCODIGO
   AND C.FORNCONTCODIGO = CPP.FORNCONTCODIGO
/
-- Cria uma tabela de backup contendo os registros dos documentos de despesas que terão as contas de fornecedores ajustadas
CREATE TABLE LIXO.FORNCONTA_BKP_DUP_TS_DOCDES AS
SELECT TSDOC.ID_DOCDESP, C.*
  FROM LIXO.FORNCONTA_BKP_DUP C,
       SSJR.TS_DOCDESPESA TSDOC
 WHERE C.FORNCODIGO = TSDOC.FORNCODIGO
   AND C.FORNCONTCODIGO = TSDOC.FORNCONTCODIGO
/
DECLARE
  CURSOR CDADOS IS
    SELECT *
      FROM LIXO.FORNCONTA_BKP_DUP;
BEGIN
  FOR REG IN CDADOS LOOP
    UPDATE FINANCE.CONTASPAGAR
       SET FORNCONTCODIGO = REG.FORNCONTCODIGO_NOVO
     WHERE FORNCODIGO = REG.FORNCODIGO
       AND FORNCONTCODIGO = REG.FORNCONTCODIGO;


    UPDATE FINANCE.CPPARCELAMENTO
       SET FORNCONTCODIGO = REG.FORNCONTCODIGO_NOVO
     WHERE FORNCODIGO = REG.FORNCODIGO
       AND FORNCONTCODIGO = REG.FORNCONTCODIGO;
       
    UPDATE SSJR.TS_DOCDESPESA
       SET FORNCONTCODIGO = REG.FORNCONTCODIGO_NOVO
     WHERE FORNCODIGO = REG.FORNCODIGO
       AND FORNCONTCODIGO = REG.FORNCONTCODIGO;       

    DELETE FINANCE.FORNCONTA
     WHERE FORNCODIGO = REG.FORNCODIGO
       AND FORNCONTCODIGO = REG.FORNCONTCODIGO;
  END LOOP;
END;
/