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;
/