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

      Ola gostaria de uma ajuda de como fazer um update buscando as informações de uma segunda tabela, onde a primeira tabela e a segunda se relacionam com um campos apenas, segue o que estou fazendo abaixo mas nao esta dando certo, se alguem puder contribuir fico grato

      update tabela1
      set tabela1.endrua = tabela2.endfil
      from tabela1, tabela2
      where tabela1.numemp = tabela2.numemp
      and tabela1.numemp = 12
      and tabela1.numcad = 204

      #93839
      hudsona
      Participante

        Miro

        Pesquise sobre o comando MERGE, ele resolve o seu probelma.
        Tendo dúvidas poste aqui.

        Abraços!

        #93848
        Rodrigo Mesquita
        Participante
          #93863
          Miro
          Participante

            fiz um script conforme orientação mas esta dando erro na tabela b, nao esta reconhecendo o campo

            MERGE INTO r034cpl a
            USING (select b.endfil
            from r030fil) b
            ON (a.numemp = b.numemp)
            WHEN MATCHED THEN
            update set a.endrua = b.endfil
            where a.numemp = 12
            and a.numcad = 204

            [quote=”hudsona”:16f89l4c]Miro

            Pesquise sobre o comando MERGE, ele resolve o seu probelma.
            Tendo dúvidas poste aqui.

            Abraços![/quote]

            #93864
            charlles_jr
            Participante

              Caro Miro,

              Updates não funcionam com junções de tabelas, tente fazer uma subquery.

              Declare

              Cursor c_SQL is
              Select tabela1.endrua,
              tabela2.endfil
              from tabela1,
              tabela2
              where tabela1.numemp = tabela2.numemp
              and tabela1.numemp = 12
              and tabela1.numcad = 204;

              Begin
              for v_SQL in c_SQL loop
              update tabela1 set v_SQL.endrua = v_SQL.endfil;
              end loop;
              commit;
              End;

              abs

              Yves Plansson

              #93871
              diegolenhardt
              Participante

                o alias “b’ não deveria estar dentro do parentese?

                assim…

                MERGE INTO r034cpl a
                USING (select b.endfil
                from r030fil b)
                ON (a.numemp = b.numemp)
                WHEN MATCHED THEN
                update set a.endrua = b.endfil
                where a.numemp = 12
                and a.numcad = 204

                #93872
                Rodrigo Mesquita
                Participante

                  Miro,

                  Se a chave primária das tabelas for só a coluna numemp voce pode fazer assim:

                  MERGE INTO r034cpl a
                  USING r030fil b
                  ON (a.numemp = b.numemp)
                  WHEN MATCHED THEN
                  update set a.endrua = b.endfil

                  Tem um detalhe, se seu banco não for 10g ou superior voce terá que utilizar tambem o When Not Matched se não voce terá erro de sintaxe.

                  #93878
                  RGaspar
                  Participante

                    Quando rodo o comando

                    MERGE INTO compl_pessoa_fisica a
                    USING (select b.ds_municipio from sus_municipio b)
                    ON (a.cd_municipio_ibge = b.cd_municipio_ibge)
                    WHEN MATCHED THEN
                    update set a.ds_municipio = b.ds_municipio;

                    Dá a mensagem
                    “Erro ao iniciar na linha 15 no comando:
                    MERGE INTO compl_pessoa_fisica a
                    USING (select b.ds_municipio from sus_municipio b)
                    ON (a.cd_municipio_ibge = b.cd_municipio_ibge)
                    WHEN MATCHED THEN
                    update set a.ds_municipio = b.ds_municipio
                    Erro na Linha de Comando:16 Coluna:6
                    Relatório de Erro:
                    Erro de SQL: ORA-00903: invalid table name
                    00903. 00000 – “invalid table name”
                    *Cause:
                    *Action:”

                    Se alguém tiver uma luz, pq em princípio, está igual aos exemplos acima

                    #93880
                    Rodrigo Mesquita
                    Participante

                      Coloque um apelido do lado de fora da subquery
                      (select ds_municipio from sus_municipio) b

                      #93881
                      Miro
                      Participante

                        e onde posso colocar mais 2 condições
                        exeplo: where numemp = 2 and numcad = 204

                        [quote=”RodrigoMesquita”:32w2nsw1]Miro,

                        Se a chave primária das tabelas for só a coluna numemp voce pode fazer assim:

                        MERGE INTO r034cpl a
                        USING r030fil b
                        ON (a.numemp = b.numemp)
                        WHEN MATCHED THEN
                        update set a.endrua = b.endfil

                        Tem um detalhe, se seu banco não for 10g ou superior voce terá que utilizar tambem o When Not Matched se não voce terá erro de sintaxe.[/quote]

                        #93883
                        Miro
                        Participante

                          ele nao reconhesse o b.endfil

                          [quote=”diegolenhardt”:3f18nuw7]o alias “b’ não deveria estar dentro do parentese?

                          assim…

                          MERGE INTO r034cpl a
                          USING (select b.endfil
                          from r030fil b)
                          ON (a.numemp = b.numemp)
                          WHEN MATCHED THEN
                          update set a.endrua = b.endfil
                          where a.numemp = 12
                          and a.numcad = 204
                          [/quote]

                          #93884
                          diegolenhardt
                          Participante

                            tenta assim:


                            MERGE INTO r034cpl a
                            USING (select b.endfil, b.numemp
                            from r030fil b) x
                            ON (a.numemp = x.numemp)
                            WHEN MATCHED THEN
                            update set a.endrua = x.endfil
                            where a.numemp = 12
                            and a.numcad = 204

                            #93886
                            RGaspar
                            Participante

                              Bah Diego
                              Não é chamar por qualquer erro, mas as sugestões não funcionaram heheh

                              MERGE INTO compl_pessoa_fisica a
                              USING (select c.ds_municipio from sus_municipio c) b
                              ON (a.cd_municipio_ibge = b.cd_municipio_ibge)
                              WHEN MATCHED THEN
                              update set a.ds_municipio = b.ds_municipio;

                              O erro é o mesmo:
                              Erro ao iniciar na linha 9 no comando:
                              MERGE INTO compl_pessoa_fisica a
                              USING (select c.ds_municipio from sus_municipio c) b
                              ON (a.cd_municipio_ibge = b.cd_municipio_ibge)
                              WHEN MATCHED THEN
                              update set a.ds_municipio = b.ds_municipio
                              Erro na Linha de Comando:11 Coluna:26
                              Relatório de Erro:
                              Erro de SQL: ORA-00904: “B”.”CD_MUNICIPIO_IBGE”: invalid identifier
                              00904. 00000 – “%s: invalid identifier”
                              *Cause:
                              *Action:

                              #93892
                              diegolenhardt
                              Participante

                                [quote=”RGaspar”:2p4044yb]Bah Diego
                                Não é chamar por qualquer erro, mas as sugestões não funcionaram heheh

                                MERGE INTO compl_pessoa_fisica a
                                USING (select c.ds_municipio from sus_municipio c) b
                                ON (a.cd_municipio_ibge = b.cd_municipio_ibge)
                                WHEN MATCHED THEN
                                update set a.ds_municipio = b.ds_municipio;

                                O erro é o mesmo:
                                Erro ao iniciar na linha 9 no comando:
                                MERGE INTO compl_pessoa_fisica a
                                USING (select c.ds_municipio from sus_municipio c) b
                                ON (a.cd_municipio_ibge = b.cd_municipio_ibge)
                                WHEN MATCHED THEN
                                update set a.ds_municipio = b.ds_municipio
                                Erro na Linha de Comando:11 Coluna:26
                                Relatório de Erro:
                                Erro de SQL: ORA-00904: “B”.”CD_MUNICIPIO_IBGE”: invalid identifier
                                00904. 00000 – “%s: invalid identifier”
                                *Cause:
                                *Action:[/quote]

                                Só ter mais atencao…
                                veja que o alias b, é para o select (), entao nao existe b.cd_municipio_ibge e simn somente b.ds_municipio, incluui lá o cd_municipioibge dentro do select que voce chama de () b.


                                MERGE INTO compl_pessoa_fisica a
                                USING (select C.CD_MUNICIPIO_IBGE, c.ds_municipio from sus_municipio c) b
                                ON (a.cd_municipio_ibge = b.cd_municipio_ibge)
                                WHEN MATCHED THEN

                                #93897
                                RGaspar
                                Participante

                                  Obrigado Diego

                                  Problema resolvido. Realmente “só” prestar mais atenção.
                                  Rodei aqui e funcionou.

                                  MERGE INTO compl_pessoa_fisica a
                                  USING (select C.CD_MUNICIPIO_IBGE, c.ds_municipio from sus_municipio c) b
                                  ON (a.cd_municipio_ibge = b.cd_municipio_ibge)
                                  WHEN MATCHED THEN
                                  update set a.ds_municipio = b.ds_municipio;

                                  Obrigado

                                  Atenciosamente

                                  Rafael Gustavo

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