/* Cria Tabela com os códigos fiscais duplicados e que estão incorretos na base */ CREATE TABLE TW_GRA_TROCA_CODFIS AS SELECT GRA.FILMAT, GRA.CODMAT, GRA.CODCOR, GRA.CODTAM, PRO.REFBAS, GRA.CODFIS, GRA.REFPRO, PRO.DESMAT, PRO.ESPMAT, DSUB.CODSAL, CAST(CASE WHEN CFG.REGRA_CODFIS = 1 THEN GRA.FILMAT||GRA.CODMAT||'-'||TO_CHAR(GRA.CODCOR)||'-'||TO_CHAR(COALESCE(DSUB.CODSAL,GRA.CODTAM)) WHEN CFG.REGRA_CODFIS = 2 THEN PRO.REFBAS WHEN CFG.REGRA_CODFIS = 3 THEN GRA.REFPRO WHEN CFG.REGRA_CODFIS = 4 THEN GRA.CODEXT ELSE GRA.FILMAT||GRA.CODMAT||'-'||TO_CHAR(GRA.CODCOR)||'-'||TO_CHAR(COALESCE(DSUB.CODSAL,GRA.CODTAM)) END AS VARCHAR(60)) NEW_CODFIS FROM TT_GRA GRA JOIN TT_PRO PRO ON PRO.FILMAT = GRA.FILMAT AND PRO.CODMAT = GRA.CODMAT JOIN TT_SUB SUB ON SUB.CODITE = GRA.CODTAM JOIN TD_SUB DSUB ON DSUB.CODTAB = SUB.CODSUB CROSS JOIN TT_CFG CFG WHERE 1=1 AND GRA.CODFIS IN (SELECT GRA.CODFIS FROM TT_GRA GRA GROUP BY GRA.CODFIS HAVING COUNT(*) > 1) AND GRA.GRAATI='T' AND PRO.SIGNAT >= 0 AND GRA.CODFIS <> (CASE WHEN CFG.REGRA_CODFIS = 1 THEN GRA.FILMAT||GRA.CODMAT||'-'||TO_CHAR(GRA.CODCOR)||'-'||TO_CHAR(COALESCE(DSUB.CODSAL,GRA.CODTAM)) WHEN CFG.REGRA_CODFIS = 2 THEN PRO.REFBAS WHEN CFG.REGRA_CODFIS = 3 THEN GRA.REFPRO WHEN CFG.REGRA_CODFIS = 4 THEN GRA.CODEXT ELSE GRA.FILMAT||GRA.CODMAT||'-'||TO_CHAR(GRA.CODCOR)||'-'||TO_CHAR(COALESCE(DSUB.CODSAL,GRA.CODTAM)) END) ORDER BY GRA.CODFIS, GRA.FILMAT, GRA.CODMAT /* Atualiza código fiscal dos registros que estavam duplicados */ /* Script deve ser aplicado com uma sessão registrada no banco de dados */ UPDATE TT_GRA GRA SET CODFIS = (SELECT TCF.NEW_CODFIS FROM TW_GRA_TROCA_CODFIS TCF WHERE TCF.FILMAT = GRA.FILMAT AND TCF.CODMAT = GRA.CODMAT AND TCF.CODCOR = GRA.CODCOR AND TCF.CODTAM = GRA.CODTAM ) WHERE (GRA.FILMAT, GRA.CODMAT, GRA.CODCOR, GRA.CODTAM) IN (SELECT TMP.FILMAT, TMP.CODMAT, TMP.CODCOR, TMP.CODTAM FROM TW_GRA_TROCA_CODFIS TMP )