41 Replies Latest reply: May 15, 2017 10:57 AM by MARIO SOARES RSS

    União de tabelas de BD diferente

    Diego Morelli

      Pessoal, boa tarde.

       

      Tenho aqui na empresa uma solicitação cuja qual eu ainda não tratei.

      Preciso trabalhar com vendas de dois bancos de dados. Um desses bancos de dados é de um antigo ERP meu, e o outro BD é do meu ERP atual.

       

      Vamos lá, tenho as seguintes tabelas:

       

      BD antigo (Viasoft):

      Tabela: PPESCLI (possui campos de dados do cliente como, cnpj, razão social, nome fantasia etc..)

       

      BD atual (Globus)

      Tabela CODCLI (possui campos de dados do cliente como, cnpj, razão social, nome fantasia etc..)

       

       

      Estou tratando aqui apenas uma das tabelas que tenho, que seriam em torno de 21 tabelas com informações de notas fiscais, vendas, quantidades, valores...

       

      Preciso de uma força para saber qual a melhor maneira de tratar esses dados e unifica-los.

       

      Obrigado comunidade         

        • Re: União de tabelas de BD diferente
          Fábio Nakashigue

          Diego,

           

          Minha primeira pergunta:

          Já virou a chave do ERP Antigo 100%?

           

          Se sim

          Pra mim você poderia criar um qvd de histórico com essas informações, ajustando corretamente no padrão certo.

          E sempre ler ele depois de forma otimizada.

           

          Att.

          • Re: União de tabelas de BD diferente
            MARIO SOARES

            Os atributos em comum entre os sistemas, poderá unificar/padronizar em tabelas como de clientes, fornecedor, veículo, motorista... Utilizando recursos como Distinct, Exists, Mapping, Concatenate, Join, ...

            Tente colocar as medidas numa tabela principal (Fato);

            Cuidado com dimensões com muitos registros distintos, você se depara-rá com tabelas de viagens realizadas por exemplo que contém muitos registros.

             

            Conheço um pouco do sistema Globus e já trabalhei com Transnet, soft para empresa de logística ou de transporte urbano/rodoviário.

              • Re: União de tabelas de BD diferente
                Diego Morelli

                Mario, o Globus é um baita sistema no meu ver e é isso mesmo, é do ramo de transportes/materias/vendas.

                 

                O Globus é oracle e meu antigo ERP, o viasoft é firebird.

                 

                Minha preocupação é tratar essas datas que são em formatos diferentes, vendas para clientes que tinha no banco antigo e não tenho mais no novo e essas coisas.

                 

                Tenho um cadastro de clientes no sistema antigo e tenho um no sistema novo, onde no sistema novo só trouxe os clientes que eram ativos. Então vejamos: terei vendas para clientes antigos e para clientes novos, e também para clientes que estão no sistema antigo e novo.

                 

                Só preciso pegar o fio da meada, e ai eu consigo ir esmiuçando a coisa toda.

                 

                Obrigado.

                  • Re: União de tabelas de BD diferente
                    MARIO SOARES

                    Entendo, é uma boa empreitada o trabalho que pegou.

                    Bem vindo ao Oracle...

                     

                    Referente as datas, quando for gerar os QVDs, poderá formata-las, tipo:

                     

                    Gerar Data de um Timestamp

                      Date(Floor(Date#([CAMPO_TIMESTAMP],'YYYY-MM-DD hh:mm:ss')),'DD/MM/YYYY') As 'Data'
                    
                    

                     

                    Gerar Tempo de um Timestamp

                      Date(Frac(Date#([CAMPO_TIMESTAMP],'YYYY-MM-DD hh:mm:ss')),'hh:mm:ss') As 'Tempo'
                    
                    

                     

                    A mascara da função Date#() tem que ser igual ao da fonte de origem;

                    Mantenha as horas separadas das datas por questão de performance.

                     

                    Referente aos cadastros, utilize campos como CNPJ, CPF, NF em comum entre os sistemas para tratar as associações, Concatenate, Join, Mapping, chaves tipo:

                    Auternumber([CNPJ],'FORNECEDOR') As '%SK_FORNECEDOR'
                    

                     

                    Abraço

                • Re: União de tabelas de BD diferente
                  Maicon Mello

                  Diego, ja fiz algumas coisas nesse sentido.

                  O que eu fiz e faria no seu caso.

                   

                  Faria a leitura do banco de dados histórico 1 vez e salva em QVD.

                  Popula esse QVD, e cria uma flag apenas para identificar que é histórico.

                   

                  String conexao firebird;

                  Exemplo :

                  Load 'Viasoft' as Flag_Identifica_Sistema,Cod_cli , CNPJ_cli , todos os campos ;

                  Select * from tabela do banco historico;

                   

                  //Quando ler o novo banco de um concatenate com o historico, deixando todos os campos com a mesma nomenclaturas.

                   

                  concatenate

                  String conexao oracle;

                  Load 'Globus' as Flag_Identifica_Sistema,Cod_cli,CNPJ_cli, todos os campos ;

                  Select * from tabela banco novo;

                   

                  Assim vai juntando as tabelas, formatando os campos datas por exemplo para que fique iguais nas duas tabelas entre outros campos mais necessários a tratar para deixar iguais entre uma tabela e outra.

                   

                  Campos que cada sistema tem sua particularidade , não tem problema.

                   

                  Lembrando que as conexões devem ser criadas no odbc  do windows, dentro da aba DSN de sistema.

                   

                  Espero ter ajudado de alguma forma.

                  • Re: União de tabelas de BD diferente
                    Diego Morelli

                    Pessoal, vamos lá. Vamos começar do básico e mais detalhado para que eu possa entender direitinho.

                     

                    Nesse print tenho os dados do meu antigo BD (Viasoft) cujo já está 100% inativo, pois já estamos em produção no novo erp.

                    Vejam que aqui tenho as colunas NOME, FANTASIA, CGC, CPF. Total de linhas 1939.

                     

                    (Figura1)

                    Viasoft.jpg

                     

                    Aqui na sequência estou listando os dados do meu novo erp (Globus) onde tenho as colunas RSOCIALCLI, NFANTASIACLI, NRINSCRICAOCLI. Total de linhas 977.

                     

                    (Figura2)

                    Globus.jpg

                     

                    Vejamos, no antigo BD (figura1) temos o campo CGC e CNP separados, e no BD atual (Figura2) temos essas mesmas informações no campo NRINSCRICAOCLI.

                     

                    Como deveria modelar essas dados da melhor maneira? No meu script de carga fiz o seguinte:

                     

                    Load Nome, Fantasia, Cgc& '|' &Cpf as NRINSCRICAOCLI, para então na transformação eu concatenat com a tabela do BD novo (Globus), porém as informações ficaram erradas.

                     

                     

                     

                    Resumindo, pela lógica voou utilizar esse campo de Cnpj e Cpf para unir as duas tabelas.

                    O que eu pensei, pegar o campo Cgc e Cpf e unir os dois e criar um novo campo colocando em uma tabela auxilia, em seguida pegar o campo Nrinscricaocli e criar uma outra tabela auxiliar.

                    Uso o Resident ou left join ou concateno?

                     

                    Agradeço se alguém puder ajudar, tenho varias tabelas para tratar, porém se eu conseguir tratar a primeira da maneira correta as outras eu vou me virando.

                     

                    Obrigado pessoal.

                      • Re: União de tabelas de BD diferente
                        Maicon Mello

                        Vamos la :

                        string conexao odbc do banco Viasoft;

                        //Viasoft

                        Load NOME, FANTASIA, if(IsNull(cpf),cgc,cpf) as NRINSCRICAOCLI;

                        select * from Tabela;

                        concatenate

                        string conexao odbc do banco globus;

                        //globus

                        Load RSOCIALCLI as NOME,  NFANTASIACLI as FANTASIA, NRINSCRICAOCLI;

                        select * from tabela;

                        Algo nesse sentido !

                          • Re: União de tabelas de BD diferente
                            Fábio Nakashigue

                            Maicon,

                             

                            Ao invés dele fazer toda vez a conexão com o banco do ERP Antigo, eu aconselho criar um qvd historico.

                             

                            Vou citar o exemplo:

                            Cria um qvw apenas para gerar o historico

                            //Viasoft

                            Historico:

                            Load NOME, FANTASIA, if(IsNull(cpf),cgc,cpf) as NRINSCRICAOCLI;

                            select * from Tabela;

                            Store Historico Into ... historico.qvd (qvd);

                             

                            Aí na sua aplicação você apenas carrega este arquivo.

                             

                            Load *

                            From ERP Novo

                             

                            Concatenate

                             

                            Load *

                            From historico;



                              • Re: União de tabelas de BD diferente
                                Maicon Mello

                                Exato, cria um QVD, mas para a leitura inicial é necessário fazer a conexão odbc.

                                  • Re: União de tabelas de BD diferente
                                    Diego Morelli

                                    Eu tenho já o DSN de sistema criado. A parte de criar o QVD na extração usando o STORE e DROP está tranquilo. O que preciso agora é na transformação tratar esses dados, ou seja unir as tabelas.

                                     

                                    São duas situações ai: Na mesma tabela do BD antigo vou unir os campos CGC e CPF criando o CNPJCPF por exemplo. Então do BD atual irei renomear o campo NRINSCRICAOCLI para CNPJCPF. Pela lógica após isso eu iria concatenar, certo? Porém se concateno o Sense traz a soma de linhas das duas tabelas.

                                      • Re: União de tabelas de BD diferente
                                        Maicon Mello

                                        manda um print.

                                        Embora concatenate tem a mesma função do union do SQL.

                                        Ele vai apendar linhas.

                                         

                                        Exemplo

                                        Tabela 1 tenho 10 registros ou seja 10 linhas.

                                        Tabela 2 tenho 5 registros ou seja 5 linhas.

                                        Quando concatenar essas tabelas, terei uma única tabela com 15 linhas.

                                         

                                        A transformação é relativamente simples ao meu entender.

                                        Sempre os campos que forem comuns entre uma tabela e outra , sempre deixe com a mesma nomenclatura.

                                        Assim eles vão ficar estruturados.

                                          • Re: União de tabelas de BD diferente
                                            Diego Morelli

                                            Maicon, entendi o que quiz dizer.

                                             

                                            Vejamos o que eu tenho aqui.

                                            BD antigo 1939

                                            BD atual 977

                                             

                                            Nessas linhas irá ocorrer de serem o mesmo CNPJ ou CPF, certo?

                                            O que está acontecendo que após o concatenate eu tenho 2916 linhas, ou seja, a soma.

                                             

                                            O que eu entendi que pela lógica eu deveria ter os 1939 mais alguns registros do 977, entendeu?

                                              • Re: União de tabelas de BD diferente
                                                Maicon Mello

                                                Deixa eu ver se eu entendi agora :

                                                 

                                                O banco novo , você tem CNPJ ou CPF que exista no antigo , certo ?

                                                Teoricamente o correto é ter 2916 linhas.

                                                Agora precisa entender sua regra, leio o banco antigo.

                                                Ao ler o banco novo, se existir registro no antigo, não carrega novamente os mesmos dados do novo.

                                                Seria isso ?

                                                  • Re: União de tabelas de BD diferente
                                                    Diego Morelli

                                                    Basicamente isso ai mesmo.

                                                     

                                                    Leio os registros do banco antigo, legal, até ai tranquilo.

                                                    Agora vou ler os registros do banco novo, pronto.

                                                     

                                                    Veja um exemplo:

                                                        

                                                    Banco antigo
                                                    NOMEFANTASIACNPJCPF
                                                    MARIA SS1000NULL
                                                    JOAODDNULL2
                                                    JOSEEE2000NULL
                                                    MARCOSQQ300NULL
                                                    Banco Atual
                                                    RSOACIALCLINFANTASIACLINRINSCRICAOCLI
                                                    MARIA SS1000
                                                    JOAODD2
                                                    JOSEEE2000
                                                    OSVALDOTT7
                                                    MARCIAUU80

                                                     

                                                    Resultado correto esperado

                                                    RSOACIALCLINFANTASIACLINRINSCRICAOCLI
                                                    MARIA SS1000
                                                    JOAODD2
                                                    JOSEEE2000
                                                    MARCOSQQ300
                                                    OSVALDOTT7
                                                    MARCIAUU80

                                                     

                                                     

                                                    Espero ter conseguido me explicar melhor  .

                                                     

                                                    Obrigado.

                                                      • Re: União de tabelas de BD diferente
                                                        Diego Morelli

                                                        Acho que deveríamos usar o RESIDENT, o que acha?

                                                        • Re: União de tabelas de BD diferente
                                                          Fábio Nakashigue

                                                          Cara você vai ter que tratar esse qvd antigo em um campo só.

                                                          Existem diversas formas de tratar esse seu qvd. Vou postar um exemplo

                                                           

                                                          Historico:

                                                          LOAD NOME          As RSOACIALCLI,

                                                                    FANTASIA     As NFANTASIACLI,

                                                                    CNPJ      As NRINSCRICAOCLI

                                                          FROM x WHERE NOT ISNULL(CNPJ)

                                                           

                                                          CONCATENATE

                                                           

                                                          LOAD NOME               As RSOACIALCLI,

                                                                    FANTASIA          As NFANTASIACLI,

                                                                    CPF     As NRINSCRICAOCLI

                                                          FROM x WHERE NOT ISNULL(CPF)


                                                          Store Historico Into ...


                                                          FINAL:

                                                          Load *

                                                          ERP NOVO


                                                          JOIN OU CONCATENATE


                                                          Load *

                                                          ERP VELHO


                                                          Mas não entendi muito bem pq sua base atual contém as mesmas informações que o ERP antigo. Caso seja isso mesmo da um join nas 2 tabelas, senão usa concatenate mesmo.


                                                           

                                                           

                                                            • Re: União de tabelas de BD diferente
                                                              Diego Morelli

                                                              Fábio, pegamos do banco antigo todos os clientes que eram ativos e cadastramos no novo. Agora irei somar as vendas do banco antigo com o novo para analisar o crescimento das vendas, por isso a necessidade de carregar os dados dos dois bancos sem perder nenhum dado.

                                                               

                                                              O que me preocupa que vou tabelas e campos diferentes mais pra frente.

                                                              Eu sempre soube que essa aplicação ia me dar trabalho, mas vamos a luta.

                                          • Re: União de tabelas de BD diferente
                                            Diego Morelli

                                            Pessoal, ficou assim depois de carregar as tabelas dos dois bancos.

                                             

                                            Vejam que eu uni a CGC e CPF pois ela tem a mesma informação da NRINSCRICAOCLI, como faço agora pra unir as tabelas sem perder dados? Eu já tentei de tudo que é JOIN, KEEP, CONCATENATE.

                                            O problema é que na validação o campo CLIENTE fica sem vinculo com o campo RSOCIAL e NFANTASIA.

                                             

                                            LOAD

                                                CODCLI,

                                                NRCLI,

                                                RSOCIALCLI,

                                                NRINSCRICAOCLI,

                                                NFANTASIACLI

                                            FROM [lib://Ext Vendas (np_administrador)/BGM_CLIENTE.QVD](qvd);

                                             

                                            LOAD CLIENTE,

                                                NOME,

                                                FANTASIA,

                                                CGC& '|' &CPF as NRINSCRICAOCLI

                                            FROM [lib://Ext Vendas (np_administrador)/PPESCLI.QVD](qvd);

                                             

                                             

                                            Me ajudem nessa.

                                             

                                            Obrigado.

                                              • Re: União de tabelas de BD diferente
                                                Maicon Mello

                                                Amigo bom dia , seu código deveria ser assim  :

                                                LOAD

                                                    CODCLI,

                                                    NRCLI,

                                                    RSOCIALCLI       as NOME,

                                                    NRINSCRICAOCLI  ,

                                                    NFANTASIACL     as FANTASIA

                                                FROM [lib://Ext Vendas (np_administrador)/BGM_CLIENTE.QVD](qvd);

                                                concatenate

                                                LOAD

                                                    CLIENTE          as  CODCLI ,   //se o campo cliente é o código igual a tabela superior.

                                                    NOME,

                                                    FANTASIA,

                                                   if(isnull(CGC),CPF,CGC) as NRINSCRICAOCLI  //aqui você vai usar ou CGC ou CPF

                                                   

                                                FROM [lib://Ext Vendas (np_administrador)/PPESCLI.QVD](qvd);

                                                  • Re: União de tabelas de BD diferente
                                                    Diego Morelli

                                                    Maicon,

                                                     

                                                    Aqui   if(isnull(CGC),CPF,CGC) as NRINSCRICAOCLI  //aqui você vai usar ou CGC ou CPF porque devo escolher entre um ou outro? Queria entender se precisar em outras situações.

                                                     

                                                    O que preciso é unir a coluna CGC (que é o cnpj) e tambem a CPF. Depois vou jogar dentro do campo NRINSCRICAOCLI porque esse campo tem as duas informações no meu banco atual, ou seja, no banco atual as informações estão no mesmo campo, diferente do erp antigo que tinha uma coluna para cada campo.

                                                     

                                                    Obrigado

                                                      • Re: União de tabelas de BD diferente
                                                        Maicon Mello

                                                        Certo amigo , dessa forma que te enviei , você terá um campo só com cnpj e cpf e nr da insrição do cliente.

                                                          • Re: União de tabelas de BD diferente
                                                            Diego Morelli

                                                            Maicon,

                                                             

                                                            Dentro do campo Incricaocli eu tenho as informações de cpf e cnpj no banco atual.

                                                            No outro banco esses dados são separados.

                                                            Tentei da forma que me falou, porém fica inconsiste. Fica com um ? em alguns clientes.

                                                              • Re: União de tabelas de BD diferente
                                                                Maicon Mello

                                                                Amigão, desculpa, pode ser que não fui claro.

                                                                 

                                                                Essa validação if(isnull(CGC),CPF,CGC) as NRINSCRICAOCLI você vai fazer somente para o banco de dados que tem 2 campos CPF e CGC.

                                                                No outro não faça validação nenhuma, apenas carregue o campo NRINSCRICAOCLI .

                                                                O que eu entendi , que seu banco velho tem 2 campos.

                                                                Ou o cliente é PF ou PJ , quando PF terá CPF , quando PJ terá CGC.

                                                                Essa é a validação que é feita, se o campo PF esta nulo pega CNPJ se não usa o PF.

                                                                  • Re: União de tabelas de BD diferente
                                                                    Diego Morelli

                                                                    Maicon, bom dia.

                                                                     

                                                                    Entendi agora sua validação e realmente deu certo, houve a junção do campo CGC com o CPF e renomeamos para NRINSCRICAOCLI. Até ai tudo bem.

                                                                     

                                                                    Dados.jpg

                                                                    Conforme a figura temos o código do cliente 729 do sistema atual e 8750 do antigo.

                                                                    Veja que temos a mesma informação em bancos diferentes e conseguimos traze-las. Em exceção o campo fantasia que no banco antigo é nulo tudo está correto.

                                                                     

                                                                    O que preciso para finalizar de vez é que apenas eu tenha uma linha e não duas, pois tenho a mesma informação nessas duas linhas, ou seja, preciso ter apenas uma linha, pois o campo INSCRICAOCLI agora é comum nos dois bancos de dados.

                                                                     

                                                                    Obrigado.

                                                                      • Re: União de tabelas de BD diferente
                                                                        Maicon Mello

                                                                        Entendi amigo.

                                                                         

                                                                        Para ficar uma linha só, você teria ai sim que fazer diferente.

                                                                         

                                                                        BancoOLDtmp:  //aqui criado um inline como se fosse seu banco antigo

                                                                        LOAD * INLINE [

                                                                            CNPJ,CPF, Nome_Cli, Razao_Cli

                                                                            10  ,   ,Coca cola, Teste

                                                                            20  ,   ,WEG, Teste1

                                                                            30  ,   ,Marisol, Teste2

                                                                                ,01 ,Joao da Silva, Teste3

                                                                           

                                                                        ];

                                                                         

                                                                         

                                                                        Bancounificado: Residente do seu banco antigo para tratar o CPF ou CNPJ em um banco so.

                                                                         

                                                                        Load if(IsNull(CNPJ) or CNPJ = '',CPF,CNPJ) as NRInscricao,

                                                                             Nome_Cli                  as Nome,

                                                                             Razao_Cli     as Razao Resident BancoOLDtmp;  //Residente que comento em cima

                                                                            

                                                                        drop Table BancoOLDtmp;  //Deleto a tabela do banco antigo e crio uma nova tabela chamado BANCO UNIFICADO.

                                                                         

                                                                        Concatenate

                                                                        //Aqui é seu banco novo

                                                                        LOAD * INLINE [

                                                                            NRInscricao, Nome, Razao

                                                                            10, Coca cola, Teste

                                                                            20, WEG, Teste1

                                                                            30, Marisol, Teste2

                                                                            40, Malwee, Teste3

                                                                            002,maicon,teste4

                                                                        ] where not Exists(NRInscricao); // Aqui eu digo que carregue só que não existe na leitura de cima, validando pelo NRIsncrição que é p CNPJ ou CPF do cliente.

                                                                          • Re: União de tabelas de BD diferente
                                                                            Maicon Mello

                                                                            Segue o  modelo que simulei em anexo.

                                                                              • Re: União de tabelas de BD diferente
                                                                                Maicon Mello

                                                                                Agora para prevalecer o codigo do cliente novo por exemplo é só inverter o código.

                                                                                 

                                                                                BancoNovo:

                                                                                LOAD * INLINE [

                                                                                    NRInscricao, Nome, Razao,CodCli

                                                                                    10, Coca cola, Teste,1000

                                                                                    20, WEG, Teste1,2000

                                                                                    30, Marisol, Teste2,3000

                                                                                    40, Malwee, Teste3,4000

                                                                                    002,maicon,teste4,5000

                                                                                ] ; // Aqui eu digo que carregue só que não existe na leitura de cima, validando pelo NRIsncrição que é p CNPJ ou CPF do cliente.

                                                                                 

                                                                                 

                                                                                 

                                                                                 

                                                                                Concatenate

                                                                                //Banco Antigo

                                                                                Load if(IsNull(CNPJ) or CNPJ = '',CPF,CNPJ) as NRInscricao,

                                                                                     Nome_Cli                  as Nome,

                                                                                     Razao_Cli     as Razao ,

                                                                                     cod                       as CodCli Resident BancoOLDtmp where not Exists(NRInscricao,if(IsNull(CNPJ) or CNPJ = '',CPF,CNPJ));

                                                                                drop Table BancoOLDtmp;

                                                                                  • Re: União de tabelas de BD diferente
                                                                                    Diego Morelli

                                                                                    Maicon, não consigo abrir um qvw com o Sense.

                                                                                     

                                                                                    Minha estrutura esta assim:

                                                                                     

                                                                                    LOAD

                                                                                        CODCLI ,

                                                                                        RSOCIALCLI  as NOME,

                                                                                        NRINSCRICAOCLI,

                                                                                        NFANTASIACLI as FANTASIA 

                                                                                    FROM [lib://Ext Vendas (np_administrador)/BGM_CLIENTE.QVD](qvd)

                                                                                    where CODCLI = '729';

                                                                                     

                                                                                    concatenate (BGM_CLIENTE)

                                                                                     

                                                                                    LOAD

                                                                                        CLIENTE    ,

                                                                                        NOME,

                                                                                        FANTASIA,

                                                                                        if(isNull(CPF),CGC,CPF) as NRINSCRICAOCLI

                                                                                       

                                                                                    FROM [lib://Ext Vendas (np_administrador)/PPESCLI.QVD](qvd)

                                                                                    where CLIENTE = '8750';

                                                                                      • Re: União de tabelas de BD diferente
                                                                                        Maicon Mello

                                                                                        LOAD

                                                                                            CODCLI ,

                                                                                            RSOCIALCLI  as NOME,

                                                                                            NRINSCRICAOCLI,

                                                                                            NFANTASIACLI as FANTASIA

                                                                                        FROM [lib://Ext Vendas (np_administrador)/BGM_CLIENTE.QVD](qvd);

                                                                                        //where CODCLI = '729';

                                                                                         

                                                                                        concatenate (BGM_CLIENTE)

                                                                                         

                                                                                        LOAD

                                                                                            CLIENTE    ,

                                                                                            NOME,

                                                                                            FANTASIA,

                                                                                            if(isNull(CPF),CGC,CPF) as NRINSCRICAOCLI

                                                                                          

                                                                                        FROM [lib://Ext Vendas (np_administrador)/PPESCLI.QVD](qvd)

                                                                                        where not exists(NRINSCRICAOCLI, if(isNull(CPF),CGC,CPF) ) ;

                                                                                          • Re: União de tabelas de BD diferente
                                                                                            Diego Morelli

                                                                                            Maicon, tentei de todos os jeitos e a unica maneira que me pareceu ser uma luz foi assim:

                                                                                             

                                                                                            LOAD

                                                                                                NRCLI ,

                                                                                                RSOCIALCLI  as NOME,

                                                                                                NRINSCRICAOCLI,

                                                                                                NFANTASIACLI as FANTASIA

                                                                                            FROM [lib://Ext Vendas (np_administrador)/BGM_CLIENTE.QVD](qvd);

                                                                                             

                                                                                             

                                                                                             

                                                                                            concatenate

                                                                                             

                                                                                             

                                                                                            LOAD

                                                                                                CLIENTE ,

                                                                                                NOME,

                                                                                                FANTASIA,

                                                                                                CPF& '_' &CGC as NRINSCRICAOCLI

                                                                                            FROM [lib://Ext Vendas (np_administrador)/PPESCLI.QVD](qvd)

                                                                                            where not exists(NRINSCRICAOCLI, if(isNull(CPF),CGC,CPF) );

                                                                                             

                                                                                             

                                                                                            Tive que usar essa chave composta, porém na frente do CNPJ ou CPF do cliente ficou com _.

                                                                                             

                                                                                             

                                                                                            Estou procurando aqui algum material mais específico e fácil de entender essa questão de cruzar e unir tabelas e campos.

                                                                                              • Re: União de tabelas de BD diferente
                                                                                                Maicon Mello

                                                                                                Amigo o mesmo if que tem no where faça para o campo CPF e CG no lugar que concatena os campos.

                                                                                                  • Re: União de tabelas de BD diferente
                                                                                                    Diego Morelli

                                                                                                    Então Maicon, mas se faço dessa forma não funciona.

                                                                                                     

                                                                                                    Script:

                                                                                                    LOAD

                                                                                                        NRCLI ,

                                                                                                        RSOCIALCLI  as NOME,

                                                                                                        NRINSCRICAOCLI,

                                                                                                        NFANTASIACLI as FANTASIA

                                                                                                    FROM [lib://Ext Vendas (np_administrador)/BGM_CLIENTE.QVD](qvd);

                                                                                                     

                                                                                                    concatenate

                                                                                                     

                                                                                                    LOAD

                                                                                                        CLIENTE ,

                                                                                                        NOME,

                                                                                                        FANTASIA,

                                                                                                        if(isNull(CPF),CGC,CPF) as NRINSCRICAOCLI

                                                                                                    FROM [lib://Ext Vendas (np_administrador)/PPESCLI.QVD](qvd)

                                                                                                    where not exists(NRINSCRICAOCLI, if(isNull(CPF),CGC,CPF) );

                                                                                                     

                                                                                                     

                                                                                                    Resultado:

                                                                                                    Dados.jpg

                                                                                                    Veja que ao fazer a seleção de um cliente pelo nome perdemos o nrinscricaocli, tendo um '?' no lugar.

                                                                                                     

                                                                                                     

                                                                                                    To quase sem cabelo já.. rsrs.

                                                                                                      • Re: União de tabelas de BD diferente
                                                                                                        Maicon Mello

                                                                                                        Amigão, então seu campo não esta como null, tem que fazer algo assim if(isnull(CGC) or CGC = '',CPF,CGC)

                                                                                                         

                                                                                                        Isso que esta acontecendo, campos não estão nulos.

                                                                                                          • Re: União de tabelas de BD diferente
                                                                                                            Diego Morelli

                                                                                                            Maicon, se o cliente for PF vai ter dados no campo CPF e o campo CNPJ vai ser vazio (null), se for PJ vai ter dados no campo CNPJ e fica null o campo CPF. Entendeu?

                                                                                                             

                                                                                                            Olha o resultado da maneira que falou:

                                                                                                            Dados.jpg

                                                                                                             

                                                                                                            To achando que terei que estudar um distinct talvez. Fazer ele carregar uma nova tabela e nela carregar meu banco atual, depois faço a carga do banco antigo desconsiderando os registros que estiverem duplicado pelo CNPJ, porém mantendo apenas um.

                                                                                                              • Re: União de tabelas de BD diferente
                                                                                                                Maicon Mello

                                                                                                                Amigo passei a solução, isso eu entendi.

                                                                                                                 

                                                                                                                Agora acredito que você é novo com a ferramenta, só que acontece.

                                                                                                                 

                                                                                                                No código você da um where not exists (NRINCRICAS,if...) //que vale o mesmo que nr inscrição.

                                                                                                                Nas duas bases o campo CNPJ ou CPF estão diferentes para esse cliente.

                                                                                                                 

                                                                                                                Leio a primeira parte certo ?

                                                                                                                Load ....

                                                                                                                 

                                                                                                                Concatenate  // Juntando os dados

                                                                                                                 

                                                                                                                Load ... where not exists ... //aqui estou dizendo que concatena somente os registros que não possui o CNPJ da tabela de cima.

                                                                                                                 

                                                                                                                Quanto o CPF e CNPJ eu entendi perfeitamente, mas fazemos essa validação para deixar em um único campo conforme sua base nova.

                                                                                                                 

                                                                                                                Talvez amigo ,mais fácil contratar uma consultoria para te auxiliar. Ou ainda sugiro você sanear sua base.

                                                                                                                 

                                                                                                                Em algum lugar e ainda acho que é no banco antigo para esse cliente o campo CNPJ ou CPF contém '?' ao invés de ser nulo.

                                                                                                                  • Re: União de tabelas de BD diferente
                                                                                                                    Diego Morelli

                                                                                                                    Maicon, eu vejo isso como uma coisa simples de tratar, porém ainda está faltando algo.

                                                                                                                    Veja:

                                                                                                                    No banco antigo tenho os dois campos (CGC e CPF) conforme a imagem:

                                                                                                                    Viasoft.jpg

                                                                                                                    No banco novo no campo NRINSCRICAOCLI tenho as mesmas informações, porém no mesmo campo/coluna.

                                                                                                                     

                                                                                                                    Globus.jpg

                                                                                                                    A parte de junção de tabelas eu entendi, porém os resultados estão errados e inconsistentes. Já até filtrei apenas um cliente na clausula where para comparar, mas mesmo assim ainda estava errado.

                                                                                                                    Eu não tenho muito conhecimento e como falei, essa é a primeira aplicação com necessidade de cruzamento de tabelas de bancos diferentes. Mas vou continuar procurando uma solução aqui e agradeço pela força de vontade em ajudar.

                                                                                                                     

                                                                                                                    Obrigado novamente.

                                                                                • Re: União de tabelas de BD diferente
                                                                                  Diego Morelli

                                                                                  Boa tarde Pessoal.

                                                                                  Enfim a solução depois de muito estudo. Foi o jeito que achei e com algumas dicas do pessoal.

                                                                                   

                                                                                  LOAD

                                                                                      CODCLI,

                                                                                      NRCLI,

                                                                                      RSOCIALCLI,

                                                                                     trim(NRINSCRICAOCLI) as NRINSCRICAOCLI,

                                                                                      NFANTASIACLI

                                                                                  FROM [lib://Ext Vendas (np_administrador)/BGM_CLIENTE.QVD](qvd);

                                                                                   

                                                                                  LOAD

                                                                                      NOME as RSOCIALCLI,

                                                                                      FANTASIA as NFANTASIACLI,

                                                                                       trim(if(isNull(CPF),CGC,CPF)) as CLIENTE

                                                                                  FROM [lib://Ext Vendas (np_administrador)/PPESCLI.QVD](qvd)

                                                                                  where not Exists(NRINSCRICAOCLI,if(isNull(CPF),CGC,CPF));

                                                                                   

                                                                                  concatenate(BGM_CLIENTE)

                                                                                  Load RSOCIALCLI,

                                                                                  NFANTASIACLI,

                                                                                  CLIENTE as NRINSCRICAOCLI

                                                                                  Resident [PPESCLI];

                                                                                  drop table [PPESCLI];

                                                                                  //fim carga de cadastro de clientes

                                                                                   

                                                                                   

                                                                                  Se alguém tiver ao a acrescentar a opnião será muito bem vinda.

                                                                                  Obrigado

                                                                                  • Re: União de tabelas de BD diferente
                                                                                    MARIO SOARES

                                                                                    Amigo;

                                                                                    Se possível e for o caso, marque as respostas apropriadas como Útil e/ou Correta para que outros membros possam saber que a sua pergunta foi respondida.

                                                                                    Abraço.