Pular para o conteúdo
  • Este tópico contém 16 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 8 meses atrás por diegolenhardt.
Visualizando 15 posts - 1 até 15 (de 17 do total)
  • Autor
    Posts
  • #94598
    Maths
    Participante

      Galera, é meio simples, sou noob ainda, sou novo na area, estou trabalhando a 2 meses.. trabalho com SLM, (gerenciamento de nivel de serviço) utilizo programas que criam fluxo de dados manipulando por fundo banco oracle.. porem eu faço tudo pela aplicação que é 100% interativa, mas tem casos como o meu agora que eu preciso acessar o banco diretamente e manipular ele por lá ou criar programinhas e talz..

      Meu problema é o seguinte.. eu tenho 2 tabelas, posso ver elas por excel ou .csv(bloco de notas) a tabela A contem 8074 registros e a B 8067, as duas SAO IDENTICAS, porem a B contem poucos registros a menos como voceis podem ver, meu chefe estava com esse problema e pediu minha ajuda, ele queria saber o seguinte “TUDO QUE HÁ DE DIFERENTE ENTRE AS DUAS TABELAS” porem galera cada uma tem 8mil registros, só que ai tem o grande problemas, alguns registros estao corrompidos, por exemplo, na coluna “START_TIME” das duas que seria a primary key contem apenas as datas, mas vamos supor, no registro 574 da tabela A em vez de uma data ali tem um CARACTER, a coluna descrição no lugar da start_time entendem? alguns dados estao bagunçados, um exemplo:

      Start Time;End Time;Ano End;Ano Start;Ano Sysdate;
      01/11/2009 00:25;01/11/2009 00:26;2009;2009;2010
      01/11/2009 00:25;01/11/2009 00:26;2009;2009;2010
      03/11/2009 13:34;03/11/2009 13:35;2009;2009;2010
      08/11/2009 02:44;09/11/2009 09:01;2009;2009;2010
      09/11/2009 03:06;09/11/2009 03:22;2009;2009;2010
      “bvsp VPN VPN – NOVA FUTURO DTVM – SP – router
      09/11/2009 17:00;11/11/2009 08:00;2009;2009;2010
      09/11/2009 22:31;10/11/2009 09:00;2009;2009;2010
      “CHAMADO REC 972807″””;PLANNER CORRETORA DE VALORES
      16/11/2009 09:38;16/11/2009 12:00;2009;2009;2010

      Entenderam?? Isso é uma amostra da tabela A, peguei as 5 primeiras colunas, sendo que a tabela tem mais de 30 colunas, podem perceber que tem 2 registros ali na amostra errados, aquele campo ali será a 26 coluna entenderam?? e esta no lugar das primeiras, ocupando.

      Ou seja, como eu trabalho com ferramenta q manipula o banco, ela absorve os dados q eu indico e eu trabalho com eles dentro da ferramenta, mas como q eu vou absorver os dados sendo q tem coluna bagunçada, string no lugar de date e etc.. o programa da erro entendem? ele absorve apenas 6,078 registros, 2 mil ele discarta pq estao zuados, e ele trabalha na base de tabelas e colunas, e esse programa q eu uso pega somente arquivos extensao .csv(1tabela,blocodenotas) ou um banco de dados ele absorve, no meu caso nao é banco… e sim a tabela A e B apenas, portanto nao tenho como fazer o q meu chefe precisa por ele.. meu boss estava tentando arrumar e resolver esse problema pelo excel, ele abriu o arquivo csv de 8mil registros pelo excel e estava tentando aplicar alguma formula sei lah para conseguir tudo de diferente entre as duas tabelas e pediu para eu tentar pelo Service Flow (ferramenta q eu trabalho) mas nao tem como.. me sobrou apenas 1 coisa, tentar arrumar isso fazendo um programinha PL/SQL, meu chefe depois de 5 horas ele chegou em min e disse, consegui cara arrumar pelo excel, achei uma formula, mas eu gostaria que voce criasse alguma rotina em PL ou sei lah para esse problemas, pois podem vir mais tabelas assim e eu já uso a sua rotina para corrigir isso.. ai eu falei FODEU!! AEHhaeuhaEUO

      Nem sei a logica q eu tenho q usar, sao duas tabelas, A e B.. ambas com 8mil registros e ele quer tudo de diferente entre elas sendo q existem dados bagunçados, o que tenho que fazer??

      Pensei primeiro numa procedure, faço um join juntando as duas e depois comparo linha por linha?? se a linha estiver igual eu pulo para a proxi, quando achar coisa diferente eu mando ele salvar a linha (um insert sei lah) dessa linha errada em outra tabela.. pensei isso mas tenho 1 mes quase de serviço, nao tenho ideia como fazer, a logica que usar, uso function? faço join? isso que gostaria de saber.. desculpem o texto por favor! agradeço a ajuda!!

      #94599
      diegolenhardt
      Participante

        comeca vendo o resultado de:


        SELECT *
        FROM TABELA_A
        MINUS
        SELECT *
        FROM TABELA_B

        #94601
        Maths
        Participante

          Amigo, executei essa rotina no PL/SQL Developer e dei um execute, ele me trouxe 14rows, ai cliquei naquele botão fetch last page.. ele me trouxe 6,925 rows selected in 7,812 seconds.. o que seriam esses 6,925? o que fez essa query?

          #94602
          diegolenhardt
          Participante

            a diferenca da tabela A com tabela B.

            #94603
            Maths
            Participante

              Não creio… só isso? Oo

              Mas seria aqueles 16rows apenas que ele me trouxe ou quando eu clico no fecth last page os 6,925? oO, nao pode ser que tenham 7mil linhas de diferença.. eu nao vi tudo isso nem fodendo oO

              Testei apenas a primeira parte da sua query.

              Select *
              from TABELA_A

              Adivinha??? Ele me trouxe tambem 6,925 oO.. tem algo errado nao tem??

              #94609
              Maths
              Participante

                e Queria reformular, na verdade, eu tenho a coluna A e a B certo? eu quero saber o que tem na coluna A que nao tem na B e o que tem na B que nao tem na A, entenderam?? sendo que sao 95% semelhantes esses 8 mil registros em cada uma, muda apenas algumas coisas, existem coisas na A que nao tem na B, e coisas na B que nao tem A.. porem eu nao tenho como identificar chave primaria.. pois alguns dados estao errados como eu disse no 1 post la emcima, na coluna “IDENTIFICADOR_PSYS” que é a minha primary key eu tenho dados em branco em alguns registros entendem? Vejam..

                Identificador Psys
                RCCF0111-1-152390466
                RCCF0111-1-152390445
                RCCF0111-1-152390473
                RCCF0111-1-152390459
                RCCF0111-1-152390438
                RCCF0111-1-152390452
                RCCF0111-1-152390431
                RCCF0111-1-152390569
                RCCF0111-1-152390674
                RCCF0111-1-152390619
                RCCF0111-1-152390647
                RCCF0111-1-152390612
                RCCF0111-1-152390605
                RCCF0111-1-152390633
                RCCF0111-1-152390653
                RCCF0111-1-152390640
                RCCF0111-1-152390626
                RCCF0111-1-152390660
                RCCF0111-1-152390667
                RCCF0111-1-152390948
                RCCF0111-1-152390933
                RCCF0511-1-152586002
                RCCF0511-1-152585995

                RCCF0511-1-152617476
                RCCF0511-1-152578045
                RCCF0511-1-152617647
                RCCF0511-1-152617669

                RCCF0511-1-152617973
                RCCF0511-1-152622515
                RCCF0511-1-152622495
                RCCF0611-1-152647723
                RCCF0611-1-152647786

                0
                26/5/2010 10:27

                RCCF0611-1-152656739
                RCCF0911-1-152760246
                RCCF0911-1-152760253
                RCCF0911-1-152760304
                16
                RCCF0911-1-152760387
                RCCF0911-1-152760825
                RCCF0911-1-152791205
                RCCF1011-1-152860075
                RCCF1011-1-152844720
                INFRAESTRUTURA ELÉTRICA / NOBREAK
                INFRAESTRUTURA ELÉTRICA / NOBREAK
                0
                INFRAESTRUTURA ELÉTRICA / NOBREAK
                INFRAESTRUTURA ELÉTRICA / NOBREAK
                INFRAESTRUTURA ELÉTRICA / NOBREAK
                INFRAESTRUTURA ELÉTRICA / NOBREAK
                RCCF1011-1-152848015
                RCCF1011-1-152852044

                Isso foi uma amostra de uns 60 registros da coluna IDENTIFICADOR_PSYS, a chave primaria da tabela A e B, deveria conter somente aquela formatação ali em todos os campos como voceis podem ver.. mas tem registros q estao em branco, outros com uma descrição, uma bagunça entendem?? entao eu queria saber o que tem de diferente entre essas duas tabelas, parece facil, mas esta dando erro em tudo aqui galera, nao to conseguindo, meu boss ta meio bravo sabe? de mau humor, nem posso perguntar nada a ele q ele solta fogo pelas orelhas.. x__x

                Obs: nao adianta eu tentar arrumar a coluna ná mão linha por linha pois sao 8 mil registros em cada e tem dados em branco q eu nao sei, o pedido do meu chefe foi apenas TUDO Q TEM DE DIFERENTE ENTRE ELAS, NAO IMPORTA OS DADOS ERRADOS, ELE QUER TUDO DE DIF ENTRE A TABELA “A” E A “B”..(TODOS OS CAMPOS) mas agora nao sei como fazer x__x

                #94610
                fsitja
                Participante

                  Em primeiro lugar, esse campo com certeza não é primary key, pois primary key não poderia ter repetido nem ter null nele… não pode ser, o Oracle não deixa inserir e daria exception.

                  Você quer comparar só pelo campo IDENTIFICADOR_PSYS e ver a diferença sem olhar para os outros campos?

                  Daria para ver assim:

                  (SELECT IDENTIFICADOR_PSYS
                  FROM TABELA_A
                  UNION
                  SELECT IDENTIFICADOR_PSYS
                  FROM TABELA_B)
                  MINUS
                  (SELECT IDENTIFICADOR_PSYS
                  FROM TABELA_A
                  INTERSECT
                  SELECT IDENTIFICADOR_PSYS
                  FROM TABELA_B)

                  #94615
                  Maths
                  Participante

                    nada x__x

                    cara sabe o pq?? ele me deu de resultado a linha IDENTIFICADOR_PSYS COM 0 ROWS, nada.. nem erro ele deu, o pl/sql editor, justamente pq tem campos em branco na identificador_psys, na verdade meu chefe nao quer saber se tem ou nao chave primaria.. pensa nessas 2 tabelas como tabelas normais, sem chave primarias, ele quer saber tudo que TEM NA TABELA A E QUE NAO TENHA NA B, E TUDO QUE TENHA NA TABELA B QUE NAO TENHA NA A, A DIFERENÇA, entendeu?ou seja, eu precisaria comparar entre as duas tabelas.. exemplo..

                    a linha 1 é igual a todos as colunas da linha 1 da tabela B?? SIM, entao pula essa.. pq é igual, quero tudo de dif entre as duas no meio desses 8 mil registros de cada uma, entendeu?? embaçado, x_x, porem o identificador psys que ele me disse para usar como identificador nao tem os dados 100% certos, como eu disse, tem arquivos em branco, tem string misturada em alguns registros… tendeu?? nao existe forma de comparar isso sem ser pensando em uma tabela? mas como se fosse string tudo, entendeu? exemplo, a palavra banana é igual a banana2? Nao, ja guarda isso em um lugar.. e isso para 8mil linhas x__x e comparando entre as duas, saco? eu to quase desistindo, n tenho ideia de cmo fazer.. e meu chefe todo cuzao, mostrei para ele 1 comando ele disse, cara, nao me mostra isso, me mostra o resultado final, dando certo >>.. todo ignorante sabe? e o foda q era um problema dele, eu sou estagiario apenas… ele me pediu ajudar no problema dele e agora ta cobrando?? porra, tenho 2 mss de experiencia e ele uns 10.. ate q o fdp resolveu isso pelo excel e quer q eu resolva por pl ou sql, faça uma rotina.. sei lah, para quando der no futuro, ele usar a minha e pronto >>

                    #94616
                    fsitja
                    Participante

                      Olha… tá complicado de entender o que tem nessas tabelas. Mas posso lhe dizer que o que o Diego postou no começo é o caminho… A ideia é fazer a subtração de uma tabela pela outra, ou seja, a diferença:

                      (select col1, col2, col3 from tab1
                      minus
                      select col1, col2, col3 from tab2)
                      union all
                      (select col1, col2, col3 from tab2
                      minus
                      select col1, col2, col3 from tab1)

                      Isso acima vai te dar o que existe na A que não existe idêntico na B e vice-versa.

                      Porém… quanto à qualidade de dados, eu realmente não estou entendendo o que está acontecendo… só se você postar exemplo de dados das duas tabelas, exemplo do que você quer obter, daí daria para nós testarmos, senão a gente vai ficar tateando no escuro, pois não tem como fazer o diagnóstico sem ver com nossos olhos.

                      #94618
                      Maths
                      Participante

                        Sao duas tabelas, .csv, voce pode abrir pelo bloco de notas ou pelo excel, vou upar elas aqui ok? Por favor, agradeço mtu se voceis dessem uma olhada…

                        Tabela A:
                        http://rapidshare.com/files/399736362/r … 1.csv.html

                        Tabela B:
                        http://rapidshare.com/files/399736700/r … 2.csv.html

                        NAO SE ASSUSTEM AEUHAEUHAEOAE

                        #94619
                        fsitja
                        Participante

                          [quote=”Maths”:2ts8lvwv]Sao duas tabelas, .csv, voce pode abrir pelo bloco de notas ou pelo excel, vou upar elas aqui ok? Por favor, agradeço mtu se voceis dessem uma olhada…

                          Tabela A:
                          http://rapidshare.com/files/399736362/r … 1.csv.html

                          Tabela B:
                          http://rapidshare.com/files/399736700/r … 2.csv.html

                          NAO SE ASSUSTEM AEUHAEUHAEOAE[/quote]

                          É bloqueado aqui no meu trabalho, o firewall barra o rapidshare.

                          Vou ver depois lá em casa.

                          #94620
                          Maths
                          Participante

                            Obrigadoooo, agradeço muito..

                            Se voce ver as tabelas fica muito mais facil para voce entender e tentar me ajudar a resolver esse problema, ficaria mtu grato! Obrigado

                            #94644
                            fsitja
                            Participante

                              Então, carreguei os arquivos aqui e, rodando o SQL abaixo me retornou 9 linhas, conforme segue:


                              SQL> (select start_time, end_time, dta_ult_alt, identificador_psys, solucao_id, status from tab_a1
                              2 union
                              3 all
                              4 select start_time, end_time, dta_ult_alt, identificador_psys, solucao_id, status from tab_a2)
                              5 minus
                              6 (select start_time, end_time, dta_ult_alt, identificador_psys, solucao_id, status from tab_a1
                              7 intersect
                              8 select start_time, end_time, dta_ult_alt, identificador_psys, solucao_id, status from tab_a2);

                              START_TIME END_TIME DTA_ULT_ALT IDENTIFICADOR_PSYS SOLUCAO_ID STATUS


                              11/06/2010 20:56 15/06/2010 11:37 RCCF1106-1-169781306 20064004 Em Resolucao
                              14/06/2010 21:24 15/06/2010 09:01 15/06/2010 09:12 RCCF1406-1-170052727 20063634 Fechado
                              14/06/2010 21:24 15/06/2010 09:01 15/06/2010 09:12 RCCF1406-1-170052734 20071485 Fechado
                              15/06/2010 08:06 15/06/2010 08:12 15/06/2010 10:17 RCCF1506-1-170061128 20086075 Fechado
                              15/06/2010 08:06 15/06/2010 08:12 15/06/2010 10:17 RCCF1506-1-170061170 20086074 Fechado
                              15/06/2010 08:07 15/06/2010 08:13 15/06/2010 10:17 RCCF1506-1-170061182 20086076 Fechado
                              15/06/2010 11:01 15/06/2010 11:32 RCCF1506-1-170061494 20063619 Em Resolucao
                              15/06/2010 11:46 15/06/2010 11:57 RCCF1506-1-170133325 20063689 Em Resolucao
                              15/06/2010 11:46 15/06/2010 12:07 RCCF1506-1-170133325 20063689 Em Resolucao

                              9 rows selected

                              Aquele SQL que eu tinha postado acima usando select * funcionou também aqui, de repente suas 2 tabelas estão com as colunas em ordens diferentes, daí o * pegaria para comparar colunas diferentes.

                              Ou então durante a carga para as tabelas deu alguma zica e corrompeu algo…

                              #94648
                              Maths
                              Participante

                                Olaaa, bom dia!!

                                Então, primeiramente agradeço muitoo pelas querys, mas entao, aquela ali com o * ele executa e me traz 7 rows, porem se eu clico naquele FETCH LAST PAGE (uma setinha verde) ele me traz 13,846 registros oO.. errado certo? pq isso é +/- o total de TODOS OS REGISTROS das duas tabelas juntas, nunca que teria praticamente tudo de diferente assim (Outra coisa, o que seria exatamente o fetch last page?)

                                Sobre a query com as 6 colunas de exemplo que voce postou aqui me trouxe 4 rows apenas.. e ai 6, eu vou adicionar TODAS as colunas da tabela na query e testar, mas será que é isso mesmo?? A diferença entre as duas??

                                #94650
                                fsitja
                                Participante

                                  O resultado do “FETCH LAST PAGE” é o que interessa, se aparece 7 ou 10 antes de dar todo o fetch não importa pois ainda tem mais linhas para exibir. É só a interface do programa que você está usando.

                                  Sobre o resultado, é aquilo que eu falei acima:
                                  – ou suas duas tabelas estão com a estrutura ou a ordem das colunas diferentes, por isso dá tudo (13 mil) com diferença.
                                  – ou tenta recarregar as tabelas novamente, porque pode ter sido feito algum erro na carga delas, porque na carga que eu testei deu 9 linhas de diferença, conforme postei acima.

                                Visualizando 15 posts - 1 até 15 (de 17 do total)
                                • Você deve fazer login para responder a este tópico.